Serilog 排除了自定义记录器提供程序
Custom Logger Provider being excluded by Serilog
Serilog 工作得很好,但我注意到它似乎排除了我设置的任何自定义记录器提供程序。
当我的 Startup 中有 UseSerilog()
时,我的 CustomProvider 永远不会被创建(CreateLogger
永远不会被调用)。
是否仍可以将自定义提供程序与 Serilog 一起使用?
//class Program, Main Method
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseSerilog() //after adding this, my Custom Logger never gets called
.UseStartup<Startup>()
.Build();
//class Startup
public void Configure(IApplicationBuilder app, ILoggerFactory logger, IServiceProvider serviceProvider)
{
logger.AddProvider(new CustomProvider(serviceProvider));
}
public class CustomProvider : ILoggerProvider
{
private readonly IServiceProvider _serviceProvider;
public void Dispose()
{
}
public CustomProvider(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
//--------------never gets called---------------
public ILogger CreateLogger(string categoryName)
{
var logger = _serviceProvider.GetService<CustomLogger>();
logger.LogLevel = LogLevel.Error;
return logger;
}
}
您需要将自定义提供程序插入 Serilog(作为接收器)。 Serilog 替换了整个默认日志记录管道以提高效率,因此无需两组级别控制和过滤器来保持同步。
这个post的背景是:https://nblumhardt.com/2017/08/use-serilog/。
Serilog 工作得很好,但我注意到它似乎排除了我设置的任何自定义记录器提供程序。
当我的 Startup 中有 UseSerilog()
时,我的 CustomProvider 永远不会被创建(CreateLogger
永远不会被调用)。
是否仍可以将自定义提供程序与 Serilog 一起使用?
//class Program, Main Method
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseSerilog() //after adding this, my Custom Logger never gets called
.UseStartup<Startup>()
.Build();
//class Startup
public void Configure(IApplicationBuilder app, ILoggerFactory logger, IServiceProvider serviceProvider)
{
logger.AddProvider(new CustomProvider(serviceProvider));
}
public class CustomProvider : ILoggerProvider
{
private readonly IServiceProvider _serviceProvider;
public void Dispose()
{
}
public CustomProvider(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
//--------------never gets called---------------
public ILogger CreateLogger(string categoryName)
{
var logger = _serviceProvider.GetService<CustomLogger>();
logger.LogLevel = LogLevel.Error;
return logger;
}
}
您需要将自定义提供程序插入 Serilog(作为接收器)。 Serilog 替换了整个默认日志记录管道以提高效率,因此无需两组级别控制和过滤器来保持同步。
这个post的背景是:https://nblumhardt.com/2017/08/use-serilog/。