【问题标题】:NLog - filters working with final/blackholeNLog - 使用最终/黑洞的过滤器
【发布时间】:2018-05-21 14:53:47
【问题描述】:

我想设置一种方法来轻松地从一个无所不包的日志文件中包含/排除某些日志消息。在我的代码中,我根据“上下文”属性记录了消息,然后我将在条件中使用该属性来包含/排除消息。

这是我的设置:

<logger writeTo=""
        final="true">
  <filters>        
  <when condition="equals('${event-properties:item=Context}', 'Database')"
        action="Log"/>
  </filters>
</logger>

<logger name="*"
        minlevel="Trace"
        writeTo="default"/>

我希望我可以在第一个记录器中包含/排除任何带有 Context='Database' 的消息,然后将 writeTo 属性更改为包含消息(即 writeTo="default")或排除(即 writeTo=" ")。

问题似乎是第一个记录器包含所有消息,并且由于 final 设置为 true,因此不允许任何消息跟踪到 catch all 记录器?只有符合记录器条件的日志才会按预期写入,但是所有日志都被它“最终确定”。

关于我的配置有什么问题有什么想法吗?

【问题讨论】:

    标签: nlog


    【解决方案1】:

    也许可以试试这个(删除final="true",改用action="LogFinal"

    <targets>
      <target xsi:type="Null" name="BlackHole" />
    </targets>
    <rules>
      <logger writeTo="BlackHole">
        <filters>        
           <when condition="equals('${event-properties:item=Context}', 'Database')"
             action="LogFinal"/>
        </filters>
      </logger>
    </rules>
    

    看起来您必须指定一个实际目标才能使自定义记录器过滤器工作(不依赖于 LogLevel)。

    【讨论】:

    • 我也在尝试这个,但它不像我/你预期的那样工作。在这种情况下,消息不会被“黑洞记录器”捕获,而是被后续的全部捕获。我认为 'when' 元素上的 'action' 属性仅与该记录器上的其他过滤器相关,即“LogFinal”指示处理不查看任何后续 'when' 元素?跨度>
    • 有一个单元测试:github.com/NLog/NLog/blob/…
    • 看起来自定义过滤器(不依赖于日志级别)不适用于空 writeTo=""。您必须使用带有 Null-Target 的旧样式。已更新答案。另见github.com/NLog/NLog/wiki/Null-target
    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2021-12-18
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多