我正在使用GRPCCore2.1 HostBuilder类来设置和运行.NET服务器,但是在正确配置SeriLog时遇到了问题,使得.NET核心日志记录管道以及我的应用程序中的其他地方都可以使用它(通过依赖注入)。
class Program
{
private static async Task Main(string[] args)
{
var hostBuilder = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<ILogger>(BuildLogger);
// other services here
})
.ConfigureLogging((hostContext, loggingBuilder) =>
loggingBuilder.AddSerilog(dispose: true));
await hostBuilder.RunConsoleAsync();
}
private static ILogger BuildLogger(IServiceProvider provider)
{
// create a (global) logger
Log.Logger = new LoggerConfiguration()
...
.CreateLogger();
return Log.Logger;
}
}
问题是,我需要调用loggingBuilder.AddSerilog()
来使用上面几行DI服务配置中注册的单例ILogger
。
我意识到我可以直接调用BuildLogger()
来获取ILogger
实例,并将该实例注册到DI服务配置中,但似乎不应该这样做。我正在寻找一种从.ConfigureLogging()
方法中访问ServiceProvider
实例的方法,这样我就可以获得注册的ILogger
,如下所示
serviceProvider.GetRequiredService<ILogger>();
并将其传递给AddSerilog()
调用。有什么想法吗?
https://stackoverflow.com/questions/50728639
复制相似问题