在 appsettings.json 日志记录上下文中,MinimumLevel 和 Override 意味着什么?

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

gun*_*171 5

默认情况下,您所说的任何严重性为“调试”或更高的日志条目都应发送到您的接收器(控制台、文件等)。

这与Microsoft 有关日志记录的文档类似:

例如,日志记录配置通常由Logging应用程序设置文件部分提供。以下示例显示了典型的 appsettings.Development.json 文件的内容:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Console": {
      "IncludeScopes": true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

[...]

LogLevel下面的属性指定Logging要记录所选类别的最低级别。在示例中,SystemMicrosoft类别在级别记录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.*