为什么asp.net核心日志记录不按类别开头?

时间:2017-11-19 20:14:24

标签: logging asp.net-core entity-framework-core

我使用的是EF Core,它记录了很多信息" info"应用程序启动时的级别消息我要过滤掉。 in their docs暗示指定类别的过滤规则应与从该类别开始的所有类别匹配(即"Microsoft"匹配"Microsoft*"。)

我的应用程序通过CreateDefaultWebBuilder设置了默认日志记录,因此我将以下内容放入appsettings.json

"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
        "Default": "Warning",
        "Microsoft": "Warning"
    }
}

与我的期望相反,这不起作用。但是,以下做了:

"Logging": {
    "IncludeScopes": false,
    "LogLevel": {
        "Default": "Warning",
        "Microsoft.EntityFrameworkCore.Migrations": "Warning",
        "Microsoft.EntityFrameworkCore.Database.Command": "Warning",
        "Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager": "Warning",
        "Microsoft.EntityFrameworkCore.Infrastructure": "Warning"
    }
}

我做错了什么?当然,我不应该明确列出每个类别吗?

1 个答案:

答案 0 :(得分:2)

默认的ASP.NET Core模板已同时包含appsettings.jsonappsettings.Development.json。后一个文件是特定于环境的文件,如果您在Development模式下运行,它将在默认之上应用

配置密钥"Microsoft"将适用于所有Microsoft.*命名空间,这是正确的。但只有当没有更具体的配置时,即最具体的配置才会获胜。

默认开发设置文件会将Microsoft前缀设置为Information,默认设置为Debug。这将覆盖您在appsettings.json中指定的内容,因此Microsoft的有效级别仍为默认Information。只有在使用更具体的命名空间时,才能从开发设置配置中覆盖该设置。

最后,您应该确保编辑正确的文件。 appsettings.json应包含适用于任何环境的配置。这些基本上应该是生产默认值。如果您只想在开发期间使用不同的配置,则应使用appsettings.Development.json。所以你可能想在这里编辑它。