如何实例化实现 Microsoft.Extensions.Logging.ILogger<T> 并记录到 Serilog 记录器的记录器

Erg*_*wun 5 entity-framework-6 serilog asp.net-core ilogger

Microsoft.Extensions.Logging.ILogger<out TCategoryName>当我无法通过标准 ASP.NET Core 依赖项注入来实现将日志输出到我的 Serilog 记录器时,如何实例化一个记录器实现?

我在 ASP.NET Core 项目中配置了 Serilog,并且设置的标准依赖项注入正确地将记录器注入到我的控制器和服务中。这些记录器的输出已正确写入我的 Serilog 配置中指定的文件。

但是,我需要将记录器传递给在 期间实例化的对象Startup.ConfigureServices(...),因此我无法通过 DI 解析它。我可以实例化 a Serilog.Logger,但由于我想避免在配置代码之外直接依赖 Serilog,因此我被迫使用自己的适配器。我希望有一些现有的适配器可以使用Microsoft.Extensions.Logging.ILogger<out TCategoryName>,但我不知道如何做到这一点。

确切的用例是将记录器注入到 a 中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);
Run Code Online (Sandbox Code Playgroud)

Erg*_*wun 6

我在这里找到了答案,以及一些其他有用的提示: https://blog.rsuter.com/logging-with-ilogger-recommendations-and-best-practices/

var loggerFactory = (ILoggerFactory)new LoggerFactory();
loggerFactory.AddSerilog(serilogLogger);
var logger = loggerFactory.CreateLogger<TCategoryName>();
Run Code Online (Sandbox Code Playgroud)