我正在查看Serilog sample project中的appsettings.json,其中包含以下代码段:
"MinimumLevel": {
"Default": "Debug",
"Override": {
"System": "Information",
"Microsoft": "Information"
}
}
在这种情况下,Override
的目的是什么? System
和Microsoft
条目在MinimumLevel
节点中没有父级设置,那么它的重载是什么?
除非我完全误解了Override
的目的。
答案 0 :(得分:0)
默认情况下,您是说任何严重程度为“调试”或更高的日志条目都应发送到您的接收器(控制台,文件等)。
这与Microsoft's document on logging类似:
例如,日志记录配置通常由应用程序设置文件的
Logging
部分提供。以下示例显示了典型的appsettings.Development.json文件的内容:{ "Logging": { "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" }, "Console": { "IncludeScopes": true } } }
[...]
LogLevel
下的Logging
属性指定了记录所选类别的最低级别。在示例中,System
和Microsoft
类别记录在Information
级别,所有其他类别记录在Debug
级别。
覆盖部分用于更改具有那些名称空间的日志条目。通常,您会希望看到您的代码的Debug
日志条目,但是对于“不是您的代码”会看到更高级别的记录(例如Information
或Warning
),像Microsoft和System。
除了将此配置放入配置文件之外,您还可以使用代码:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog((ctx, cfg) =>
{
cfg.ReadFrom.Configuration(ctx.Configuration)
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information);
})
.Build();
Code from kimsereyblog.blogspot.com
他们对该过程的解释是:
从示例中我们看到可以配置默认的最低日志记录级别
.MinimumLevel.Debug()
。我们还可以覆盖某些命名空间的默认值,例如,在这里,我们将Microsoft
命名空间的最低日志记录级别设置为Information
。这样可以防止ASP.NET Core在保留我们自己的调试日志的同时记录所有调试日志。
另一种解释,来自nblumhardt.com:
Override
的第一个参数是源上下文前缀,通常与与记录器关联的类的名称空间限定的类型名称匹配。...
那么,当记录器归
Warning
命名空间中的类型所有时,以上配置的作用是仅在Microsoft.*
级别或更高级别生成事件。