Używając funkcji Azure Function V3, jak wstrzyknąć istniejący Ilogger do nowego pliku klasy?
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
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;
}
}
}