c# - Net Core 3.0 和 Serilog 产生像 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 的输出就像我使用默认记录一样。但据我了解,主机生成器现在已替换 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>();
});
推荐阅读
- ubuntu - 网站 https://example.com 的安全连接失败,但适用于 http://example.com
- entity-framework-core - 如何在启动类的配置服务下注册存储库模式
- php - Wordpress 错误地重定向到 wp-admin/install.php
- javascript - 如何将“React Component”不渲染到 DOM
- amazon-web-services - AWS SNS 不再发送 SMS
- java - Vaadin 和 Netbeans 8.2 - 需要在 Web 应用程序中创建一个文件夹
- spring-boot - 如果我们想从 ActiveDirectory 获取用户详细信息,是否需要编写 CustomActiveDirectoryLdapAuthenticationProvider
- javascript - WebStorm 调试器在断点处将 React 组件内的局部变量视为“未定义”,尽管它有一个值
- angularjs - celltemplate uigrid 中的条件
- sql - 如何使用 SQL 更新具有不同值的表列?