NLog - 使用 final/blackhole 的过滤器

NLog - filters working with final/blackhole

我想设置一种方法来轻松地 include/exclude 从一个包罗万象的日志文件中提取某些日志消息。在我的整个代码中,我已经根据 "Context" 属性 记录了消息,然后我将在 include/exclude 消息的条件下使用它。

这是我的设置:

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

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

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

问题似乎是第一个记录器包含了所有消息,并且由于 final 设置为 true,不允许任何消息跟随到捕获所有记录器?只有符合记录器中条件的日志才会按预期写入,但是所有日志都被它 "finalized"。

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

也许试试这个(删除 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)。