asp.net-core - Serilog ILogger Provider 不响应配置
问题描述
我使用 Serilog 作为 Microsoft.Extension.Logging 的提供者,我不希望它接管所有的日志控制。但是,Serilog 没有响应配置。我不尊重默认级别,也不尊重其自己的提供者别名“Serilog”的默认级别。
套餐
<PackageReference Include="Serilog.Extensions.Logging" Version="2.0.4" />
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
<PackageReference Include="Serilog.Sinks.Debug" Version="1.0.1" />
程序.cs
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(outputTemplate: "{Timestamp:HH:mm:ss.fff} [{Level:u3}] {SourceContext} - {Message:lj}{NewLine}{Exception}")
.WriteTo.Debug()
.CreateLogger();
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.AddSerilog(dispose: true);
})
.Build();
应用设置.json
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
"Debug": {
"LogLevel": {
"Default": "Warning"
}
},
"Console": {
"LogLevel": {
"Default": "Warning"
}
},
"Serilog": {
"LogLevel": {
"Default": "Warning"
}
}
}
解决方案
该调用logging.AddSerilog(dispose: true);
还添加了一个级别为 Trace 的过滤器,该过滤器覆盖了 Logging 配置。手动添加 Serilog 提供程序并使用最低级别的 Verbose 配置 Serilog,这样您就可以忘记这个可怕的贪婪库的配置,并像使用任何其他 Logging 提供程序一样使用它。
程序.cs
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseApplicationInsights()
.UseStartup<Startup>()
.ConfigureLogging((builderContext, logging) =>
{
var logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Console(outputTemplate: "[{Level:w4} {Timestamp:HH:mm:ss.fff} {SourceContext}]{NewLine} {Message:lj}{NewLine}{Exception}")
.WriteTo.Debug(outputTemplate: "[{Timestamp:HH:mm:ss.fff} {SourceContext} {Level:u3}] {Message:lj}{NewLine}{Exception}")
.CreateLogger();
logging.Services.AddSingleton<ILoggerProvider, SerilogLoggerProvider>(services => new SerilogLoggerProvider(logger, true));
})
.Build();
}
推荐阅读
- android - 使用不带 SDK 的 Google AdMob
- javascript - 谷歌云存储图像 url 工作正常,但是当在 img html 文件的 src 中使用时,它会转到替代项并且不显示图像
- flutter - 为什么我的流列表重复列表中的项目?
- python - 如何在我的堆叠圆环图图表中为每个圆环图仅显示一个数据标签?
- cuda - Nvidia CUDA 错误:没有可在设备上执行的内核映像
- python - pandas 类别列 - 为什么 .apply 允许访问区间属性?
- sql - 无法使用 SQL Server 导入/导出向导
- iframe - Safari 不尊重位置:返回选项卡时在 iFrame 中修复
- graph - 在 x 轴上显示工作日而不是 Grafana 上的日期
- html - 完成后如何使文本上的垂直线消失