Usando o Azure Function V3, como injeto o Ilogger existente em um novo arquivo de classe?
Eu criei um novo Azure Function, V3, CORE 3.1, usando VS2019. Ele usa um HTTPTrigger básico. Eu criei um novo arquivo de classe e gostaria de injetar o Ilogger existente nele. Como isso pode ser alcançado? Eu sou novo nisso, então qualquer ajuda seria apreciada.
EDITAR:
Então, finalmente descobri isso, estava complicando o assunto. As funções V3 já estão configuradas para registro com ILogger, de acordo com este post há um bug que filtra qualquer registro criado com uma categoria que não começa com Função: Incapaz de usar a instância ILogger fornecida via DI
Tudo que eu precisava fazer era injetar o logger na classe assim:
private readonly ILogger _logger;
public ClassName(ILogger<ClassName> logger)
{
_logger = logger;
}
Em seguida, basta chamá-lo assim:
_logger.LogInformation("Log Message");
Eu escolhi a opção 1 da postagem acima e adicionei o namespace ao arquivo host.json:
"logLevel": {
"NamespaceName": "Information"
}
Respostas
Tenho uma função que grava logs no App Insights e uso o ILogger.
Você pode usar ILogger assim com injeção de dependência em suas outras classes de serviço / auxiliar.
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");
}
}
Eu habilito o registro no arquivo de inicialização e registro o DI.
class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddLogging();
builder.Services.AddTransient<ExampleClass, IExampleClass>();
}
}
Que pode ser invocado pela classe principal.
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;
}
}
}