Azure Function V3를 사용하여 기존 Ilogger를 새 클래스 파일에 어떻게 삽입합니까?

Nov 27 2020

VS2019를 사용하여 새로운 Azure Function, V3, CORE 3.1을 만들었습니다. 기본 HTTPTrigger를 사용합니다. 새 클래스 파일을 만들었으며 기존 Ilogger를 여기에 삽입하고 싶습니다. 이것이 어떻게 달성 될 수 있습니까? 나는 이것에 익숙하지 않으므로 어떤 도움을 주시면 감사하겠습니다.

편집하다:

그래서 마침내 이것을 알아 냈고 문제를 복잡하게 만들었습니다. V3 기능은 이미 ILogger로 로깅하도록 구성되어 있습니다.이 게시물에 따르면 Function : DI를 통해 제공되는 ILogger 인스턴스를 사용할 수 없음으로 시작하지 않는 카테고리로 생성 된 로그를 필터링하는 버그가 있습니다.

내가해야 할 일은 다음과 같이 로거를 클래스에 주입하는 것뿐입니다.

private readonly ILogger _logger;

        public ClassName(ILogger<ClassName> logger)
        {
            _logger = logger;
        }

그런 다음 다음과 같이 호출했습니다.

_logger.LogInformation("Log Message");

위 게시물의 옵션 1을 사용하여 host.json 파일에 네임 스페이스를 추가했습니다.

"logLevel": {
      "NamespaceName": "Information"
    }

답변

1 knowonecanknow Nov 27 2020 at 05:22

App Insights에 로그를 작성하는 기능이 있으며 ILogger를 사용합니다.

다른 서비스 / 도우미 클래스에서 종속성 주입과 함께 이와 같이 ILogger를 사용할 수 있습니다.

public interface IExampleClass
{
    void ExampleMethod();
}

public class ExampleClass : IExampleClass
{
    private readonly ILogger<ExampleClass> _logger;

    public ExampleClass(ILogger<ExampleClass> logger)
    {
        _logger = logger;
    }

    public void ExampleMethod()
    {
       _logger.LogInformation("Example info log");
    }
}

시작 파일에서 로그인을 활성화하고 DI를 등록합니다.

class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddLogging();
        builder.Services.AddTransient<ExampleClass, IExampleClass>();
    }
}

메인 클래스에서 호출 할 수 있습니다.

public class ThisIsAnAzureFunction
{
    private readonly IExampleClass _exampleClass;

    public ThisIsAnAzureFunction(IExampleClass exampleClass)
    {
        _exampleClass = exampleClass;
    }

    [FunctionName("SomeAzureFunctionName")]
    public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
    {
        try
        {
            //Try some stuff
        }
        catch (Exception exception)
        {
            //Log some stuff
            log.LogError(exception);
            throw;
        }
    }
}