Ang*_*ker 2 .net c# logging .net-core
我正在查看Serilog 示例项目中的 appsettings.json ,其中包含以下代码片段:
"MinimumLevel": {
"Default": "Debug",
"Override": {
"System": "Information",
"Microsoft": "Information"
}
}
Run Code Online (Sandbox Code Playgroud)
在这种背景下,这样做的目的是什么Override?和条目在节点中没有父设置,那么它覆盖System的是什么?MicrosoftMinimumLevel
除非我完全误解了 的目的Override。
默认情况下,您所说的任何严重性为“调试”或更高的日志条目都应发送到您的接收器(控制台、文件等)。
例如,日志记录配置通常由
Logging应用程序设置文件部分提供。以下示例显示了典型的 appsettings.Development.json 文件的内容:Run Code Online (Sandbox Code Playgroud){ "Logging": { "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" }, "Console": { "IncludeScopes": true } } }[...]
LogLevel下面的属性指定Logging要记录所选类别的最低级别。在示例中,System和Microsoft类别在级别记录Information,所有其他类别在级别记录Debug。
覆盖部分用于更改给定命名空间类型的最低日志级别。System.*在您的示例中,这意味着来自或命名空间的日志Microsoft.*必须是信息或更高级别才能显示。
通常,您希望查看代码Debug的日志条目,但更高级别(如或)表示“不是您的代码”,例如 Microsoft 和 System.InformationWarning
您还可以使用代码,而不是将此配置放入配置文件中:
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog((ctx, cfg) =>
{
cfg.ReadFrom.Configuration(ctx.Configuration)
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information);
})
.Build();
Run Code Online (Sandbox Code Playgroud)
代码来自 kimsereyblog.blogspot.com
他们对该过程的解释是:
从示例中我们看到我们可以配置默认的最低日志级别
.MinimumLevel.Debug()。我们还可以覆盖某些命名空间的默认设置,例如,在这里我们将Microsoft命名空间的最低日志记录级别设置为Information. 这将阻止 ASP.NET Core 记录所有调试日志,同时保留我们自己的调试日志。
另一种解释,来自nblumhardt.com:
第一个参数
Override是源上下文前缀,通常与与记录器关联的类的命名空间限定类型名称相匹配。...
那么,上述配置的效果是,仅
Warning当记录器由命名空间中的类型拥有时,才在该级别或更高级别生成事件Microsoft.*。