Używając funkcji Azure Function V3, jak wstrzyknąć istniejący Ilogger do nowego pliku klasy?

Nov 27 2020

Utworzyłem nową funkcję Azure, V3, CORE 3.1, używając VS2019. Używa podstawowego HTTPTrigger. Utworzyłem nowy plik klasy i chciałbym wstrzyknąć do niego istniejący Ilogger. Jak można to osiągnąć? Jestem w tym nowy, więc każda pomoc będzie mile widziana.

EDYTOWAĆ:

Więc w końcu to rozgryzłem, zbytnio komplikowałem sprawę. Funkcje V3 są już skonfigurowane do logowania za pomocą ILogger, zgodnie z tym postem istnieje błąd, który odfiltrowuje każdy dziennik utworzony z kategorią, która nie zaczyna się od Function: Unable to use ILogger instance dostarczanego przez DI

Wszystko, co musiałem zrobić, to wstrzyknąć rejestrator do klasy w następujący sposób:

private readonly ILogger _logger;

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

Następnie nazwał to tak:

_logger.LogInformation("Log Message");

Poszedłem z opcją 1 z powyższego postu i dodałem przestrzeń nazw do pliku host.json:

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

Odpowiedzi

1 knowonecanknow Nov 27 2020 at 05:22

Mam funkcję, która zapisuje dzienniki do App Insights i używam ILogger.

Możesz użyć ILogger w ten sposób z iniekcją zależności w innych klasach usługi / pomocnika.

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");
    }
}

Włączam logowanie w pliku startowym i rejestruję DI.

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

Który może zostać wywołany przez główną klasę.

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;
        }
    }
}