当我无法通过标准ASP.NET Core依赖项注入来实现将Microsoft.Extensions.Logging.ILogger<out TCategoryName>
记录到我的Serilog记录器时,如何实例化它?
我在ASP.NET Core项目中配置了Serilog,并且标准依赖项注入设置是将记录器正确注入到我的控制器和服务中。这些记录器的输出已正确写入我的Serilog配置中指定的文件。
但是,我需要将记录器传递给在Startup.ConfigureServices(...)
期间实例化的对象,因此无法通过DI解析它。我可以实例化Serilog.Logger
,但是由于我想避免在配置代码之外直接依赖Serilog,因此我不得不使用自己的适配器。我希望有一些可以使用Microsoft.Extensions.Logging.ILogger<out TCategoryName>
的现有适配器,但是我不知道该怎么做。
确切的用例是将记录器注入到DbCommandInterceptor
中,我正在尝试在Startup.ConfigureServices(...)
中进行此操作:
var databaseConfiguration = this.Configuration
.GetSection(nameof(DatabaseConfiguration))
.Get<DatabaseConfiguration>();
var interceptor = new LoggingDbCommandInterceptor(
warning => Log.Logger.Warning("{Warning}", warning),
error => Log.Logger.Error("{Error}", error),
databaseConfiguration);
var dbConfiguration = new MyDbConfiguration(interceptor);
DbConfiguration.SetConfiguration(dbConfiguration);
var loggerFactory = (ILoggerFactory)new LoggerFactory();
loggerFactory.AddSerilog(serilogLogger);
var logger = loggerFactory.CreateLogger<TCategoryName>();