Queria que meu aplicativo tivesse capacidade de registrar em um arquivo, então comecei a procurar algo mais do que a estrutura de log padrão do .NET Core 2.2. Vejo que Serilog pode fazer o trabalho. No entanto, não consigo encontrar nenhum documento sobre como configurar o Serilog no aplicativo .NET Core Console com Injeção de Dependência. Tudo o que vejo são materiais do ASP.NET, o que provavelmente não é o que eu preciso.
Comecei a fazer isso sozinho. Eu instalei (Nuget):
- Serilog
- Serilog.Extensions.Logging
- Serilog.Sinks.File
- Serilog.Sinks.Console (para usar o Serilog em todos os meus logs)
Eu criei uma extensão paraServiceCollection
public static void AddLogging(this IServiceCollection services, Microsoft.Extensions.Logging.LogLevel logLevel)
{
var serilogLogger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("log.txt")
.CreateLogger();
services.AddLogging(builder =>
{
builder.SetMinimumLevel(logLevel);
builder.AddSerilog(logger: serilogLogger, dispose: true);
});
}
O registro funciona, no entanto:
- nível de log não é o que eu defini. Parece que o serilog está usando o nível INFO, embora eu quisesse ter DEBUG. Por que minha configuração não é respeitada? Afinal, ainda estou usando a estrutura de log do NET Core, então estou usando-a para configurar o nível de log
- estou realmente fazendo esta instalação corretamente? Não tenho muita certeza se
dispose
deveria sertrue
. Geralmente, quero que a estrutura de injeção de dependência do NET Core cuide da disposição dos serviços.
builder.SetMinimumLevel
tem prioridade mais alta que o estabelecimento de Serilog. Portanto, posso definir o log Verbose no Serilog e o nível real desejado no log da Microsoft para obter o que eu preciso. Vejo que você está em algum aplicativo hospedado, como o ASP.NET. Provavelmente você está usando o pacote Serilog.AspNetCore. No meu caso, eu não tenho nenhum host.