【问题标题】:Ignore Microsoft.AspNetCore.* messages in NLog logs忽略 NLog 日志中的 Microsoft.AspNetCore.* 消息
【发布时间】:2019-09-23 14:40:54
【问题描述】:

我有一个 ASP.NET Core 2.2 应用程序。我想在这个应用程序中使用 NLog。虽然我已经成功集成了 NLog,但是写入的日志太多了。具体来说,我看到大量来自Microsoft.AspNetCore. 的消息。我真的只想显示来自我的代码的消息。

我复制了 nlog.config 文件显示 here。但是,我仍然看到 ton 的 Microsoft.AspNetCore 消息。如何防止这些消息被写入日志?我错过了什么?

【问题讨论】:

    标签: asp.net-core nlog


    【解决方案1】:

    如果您使用来自wiki-page 的 NLog.config:

    <logger name="Microsoft.*" maxlevel="Info" final="true" />  <!-- Blackhole -->
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
    

    那你就可以改成这个(把maxLevel改成Error)

    <logger name="Microsoft.*" maxlevel="Error" final="true" />  <!-- Blackhole -->
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
    

    你会在目标输出ownFile-web中找到你的输出

    另见:https://github.com/nlog/nlog/wiki/Configuration-file#rules

    【讨论】:

    • 不幸的是,这似乎不起作用。我仍然看到所有 Microsoft.* 条目。
    • @Learner 您正在查看错误的日志文件,或者您没有部署更新 nlog.config。尝试使用您当前的 NLog.config 更新原始问题
    • @Learner 也许还包括一个您认为不需要的日志消息的示例。请确保 ${logger} 包含在 NLog 布局中。
    • 我认为上面只会停止写 Microsoft.* logger 来登录ownFile-web 文件。但是为了防止allfile,我们需要在allfile规则之上写同样的规则。
    【解决方案2】:

    您无法停止它们,但您可以在特定日志级别以下将它们过滤掉。例如,您可以在 appsettings.json 中添加如下内容:

    "Logging": {
        "LogLevel": {
            "Microsoft.AspNetCore": "Critical"
        }
    }
    

    这将只记录以Microsoft.AspNetCore 开头的任何命名空间的关键消息。任何较低的日志级别都将被有效地忽略。

    但是,我不建议实际这样做,或者至少不要走极端。如果您要排除某个特定消息,请准确定位该命名空间,然后将最低日志级别设置为更合理的值,例如 Warning。大多数日志聊天都是Informational 级别,因此将被排除在外,但您仍然会收到警告或更高级别的警告,以防出现问题。

    有关过滤的更多信息,请参阅docs

    【讨论】:

      【解决方案3】:

      这可能有不同的原因。如果您有多个配置文件(例如appsettings.jsonappsettings.Development.json,那么您需要确保您在appsettings.Development.json 中设置的规则正确覆盖在appsettings.json 中设置的规则。具体而言,规则应命名和排序并且 catch all 规则应该排在最后。

      appsettings.json:

        "NLog": {
          "rules": {
            "999": {
              "logger": "*",
              "minLevel": "Debug",
              "writeTo": "console"
            }
          }
        }
      

      appsettings.Development.json:

        "NLog": {
          "rules": {
            "0_Microsoft_AspNetCore": {
              "logger": "Microsoft.AspNetCore.*",
              "maxLevel": "Error",
              "final": true
            },
            "999": {
              "logger": "*",
              "minLevel": "Debug",
              "writeTo": "console"
            }
          }
        }
      

      另请参阅:https://github.com/NLog/NLog.Extensions.Logging/issues/472https://stackoverflow.com/a/7995960/474034

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 1970-01-01
        相关资源
        最近更新 更多