3

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>,但我不知道该怎么做。

确切的用例是将记录器注入到 aDbCommandInterceptor中,我正在尝试在其中执行此操作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);
4

1 回答 1

5

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

var loggerFactory = (ILoggerFactory)new LoggerFactory();
loggerFactory.AddSerilog(serilogLogger);
var logger = loggerFactory.CreateLogger<TCategoryName>();
于 2020-06-12T03:36:29.447 回答