【问题标题】:NLog 4.0 ignores final attribute on a ruleNLog 4.0 忽略规则的最终属性
【发布时间】:2015-07-26 20:08:26
【问题描述】:

我的应用程序正在使用配置有NLog.config 的 NLog,如下所示。它还使用 RavenDB 数据库,默认情况下使用活动的 NLog 设置进行日志记录。

它会产生大量污染日志的 DEBUG 和 INFO 消息。我确实想记录错误和警告消息。 RavenDB 创建的所有记录都来自以Raven 开头的命名空间。

我创建了如下所示的规则。基本上有一个 final 规则可以防止来自 Raven.* 命名空间的 INFO/DEBUG 消息写入日志文件。在我将 NuGet 包升级到 NLog 4.0 之前,一切都运行良好。现在所有的 RavenDB 消息都被写入日志文件。

这是一个错误还是 NLog 版本之间发生了一些配置更改?

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="file" xsi:type="AsyncWrapper" queueLimit="1000" overflowAction="Discard">
      <target
        name="file"
        xsi:type="File"
        layout="${longdate} - ${level:upperCase=true} - ${identity} - ${logger} - ${message}${onexception:inner=${newline}${exception:format=tostring}${newline}}"
        fileName="D:/Logs/AppName/${shortdate}.log" />
    </target>
  </targets>
  <rules>
    <logger name="Raven.*" writeTo="file" minlevel="Warn" final="true" />
    <logger name="*" writeTo="file" minlevel="Debug" />
  </rules>
</nlog>

【问题讨论】:

    标签: nlog


    【解决方案1】:

    显然 NLog 4 中发生了逻辑变化。它不再标记来自 Raven 命名空间且级别低于Warn final 的消息。

    http://nlog-project.org/2015/06/09/nlog-4-has-been-released.html

    因此,必须更改规则以将 Raven.* 命名空间中带有 maxlevel="INFO" 的消息发送到 null 目标。

    【讨论】:

    • 这是最佳做法吗?我也是这样做的。只是想知道,因为这意味着您现在每个命名空间至少有两个规则。
    • 感谢您回答这个问题,我在 wiki 上找不到它。它仍然说“属性 final="true" 将导致在执行写入后停止进一步的处理。”
    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 2018-05-28
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多