在Appsettings.json日志记录上下文中MinimumLevel和Override是什么意思?

时间:2019-03-04 19:58:14

标签: c# .net logging .net-core

我正在查看Serilog sample project中的appsettings.json,其中包含以下代码段:

"MinimumLevel": {
  "Default": "Debug",
  "Override": {
    "System": "Information",
    "Microsoft": "Information"
  }
}

在这种情况下,Override的目的是什么? SystemMicrosoft条目在MinimumLevel节点中没有父级设置,那么它的重载是什么?

除非我完全误解了Override的目的。

1 个答案:

答案 0 :(得分:0)

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

这与Microsoft's document on logging类似:

  

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

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Console": {
      "IncludeScopes": true
    }
  }
}
     

[...]

     

LogLevel下的Logging属性指定了记录所选类别的最低级别。在示例中,SystemMicrosoft类别记录在Information级别,所有其他类别记录在Debug级别。

覆盖部分用于更改具有那些名称空间的日志条目。通常,您会希望看到您的代码Debug日志条目,但是对于“不是您的代码”会看到更高级别的记录(例如InformationWarning),像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.*级别或更高级别生成事件。