[英]ASP.NET Core Web API - How to resolve conflict between Serilog and Microsoft.Extensions.Logging
[英]Net Core 3.0 and Serilog producing output like Microsoft.Extensions.Logging
我有一個使用.Net Core 3.0 的簡單 web 應用程序。
在我的主機生成器中,我這樣做:
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);
}
...
static 記錄器工作正常,但 _logger 的 output 就像我使用默認記錄一樣。 但據我了解,主機構建器現在已替換ILoggerFactory ,並且應該 output Serilog 樣式為 output。
如何讓 _logger output 像 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>();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.