Quería que mi aplicación tuviera la capacidad de iniciar sesión en un archivo, así que comencé a buscar algo más que el marco de registro predeterminado de .NET Core 2.2. Veo que Serilog podría hacer el trabajo. Sin embargo, no puedo encontrar ningún documento sobre cómo configurar Serilog en la aplicación .NET Core Console con Dependency Injection. Todo lo que veo son materiales ASP.NET, que probablemente no es lo que necesito.
Empecé a hacerlo yo mismo. Instalé (Nuget):
- Serilog
- Serilog.Extensions.Logging
- Serilog.Sinks.File
- Serilog.Sinks.Console (para usar Serilog para todos mis registros)
Creé una extensión 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);
});
}
El registro funciona, sin embargo:
- El nivel de registro no es lo que configuré. Parece que serilog está usando el nivel INFO, aunque quería tener DEBUG. ¿Por qué no se respeta mi entorno? Después de todo, todavía estoy usando el marco de registro de NET Core, así que lo estoy usando para configurar el nivel de registro
- ¿Realmente estoy haciendo esta configuración correctamente? No estoy realmente seguro de si
dispose
debería sertrue
. En general, quiero que el marco de inyección de dependencia de NET Core se encargue de la eliminación de los servicios.
builder.SetMinimumLevel
settin tiene mayor prioridad que la configuración de Serilog. Entonces, puedo configurar el registro detallado en Serilog y el nivel real deseado en el registro de Microsoft para obtener lo que necesito. Veo que estás en alguna aplicación alojada, como ASP.NET. Probablemente esté utilizando el paquete Serilog.AspNetCore. En mi caso, no tengo ningún host.