Net Core 3.0 和 Serilog 产生类似 Microsoft.Extensions.Logging 的输出

Net Core 3.0 and Serilog producing output like Microsoft.Extensions.Logging

我有一个使用 .Net Core 3.0 的简单网络应用程序。

在我的主机生成器中,我这样做:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                })
                .UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Console());

然后我尝试在 Web 应用程序项目引用的另一个项目(使用 netcoreapp3.0 的简单 dll)中实现它:

using using Microsoft.Extensions.Logging;
...
private readonly ILogger<MyClass> _logger;

public MyClass(ILogger<MyClass> logger){
  _logger = logger;
  ...
  Log.Logger.Information("this is a test {test}", command.GetType().Name);

  _logger.LogInformation("Command received: {CommandType}", command.GetType().Name);
}
...

静态记录器工作正常,但 _logger 的输出就像我使用默认日志记录一样。但据我阅读 this 的理解,主机构建器现在替换了 ILoggerFactory 并且应该输出 Serilog 样式的输出。

如何使 _logger 输出与 Serilog 输出一样整洁?

我遇到的问题是,每当我捕获队列事件时,日志都会使用 Microsoft.Extensions.Logging 样式的日志记录。

这似乎是因为事件侦听器以某种方式在日志记录工厂被替换之前注册但在之后执行,这导致了奇怪的日志记录。我的解决方案是这样做的:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .Enrich.FromLogContext()
                    .WriteTo.Console());
                    webBuilder.UseStartup<Startup>();
                });