Я использую класс .NET Core 2.1 HostBuilder для настройки и запуска сервера GRPC, и у меня возникают проблемы с правильной настройкой SeriLog, чтобы он использовался конвейером ведения журнала .NET Core, а также был доступен (посредством внедрения зависимостей).) в другом месте в моем приложении.
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()
для использования синглтона ILogger
, который был зарегистрирован в конфигурации служб DI несколькими строками выше.
Я понимаю, что мог бы напрямую позвонить BuildLogger()
, чтобы получить экземпляр ILogger
и зарегистрировать этот экземпляр в конфигурации службы DI, но, похоже, мне это не нужно.Я ищу способ доступа к экземпляру ServiceProvider
из метода .ConfigureLogging()
, чтобы я мог получить зарегистрированный ILogger
, например,
serviceProvider.GetRequiredService<ILogger>();
и передать его AddSerilog()
звонок.Есть идеи?