过滤时根据包含的子字符串记录到不同的文件

Log to a different file depending on a contains substring when filter

我想在我的 nlog.config 中设置过滤器,如果一条消息包含子字符串并且到另一个文件(由文件目标 technicalTarget 定义),如果没有。

换句话说:domainTarget 中包含的任何内容(无论其规则多么复杂)都不应该出现在 technicalTarget.

这是我试过的:

<rules>
    <logger name="*" minlevel="Trace" writeTo="domainTarget">
        <filters>
            <when condition="contains('${message}', 'mysubstring')" action="LogFinal"/>
        </filters>
    </logger>
    <logger name="*" minlevel="Trace" writeTo="technicalTarget"/>
</rules>

使用这些设置,它会将 所有内容 记录到 domainTarget。并且还将所有内容记录到 technicalTarget 除了 带有子字符串的消息。

有人可以吗

  1. 解释算法如何应用这些过滤器。
  2. 显示正确的过滤器设置以实现我的上述目标。

您是否尝试过使用 NLog 4.6 引入的 defaultAction

<logger name="*" minlevel="Trace" writeTo="domainTarget">
  <filters defaultAction="Ignore">
    <when condition="contains('${message}', 'mysubstring')" action="LogFinal" />
  </filters>
</logger> 
<logger name="*" minlevel="Trace" writeTo="technicalTarget"/>