如何为NLog Target添加过滤条件

How to add filter condition for NLog Target

我有一个问题我写了一个 Nlog.target 来登录数据库,但我希望 nlog 应该根据条件登录。如果 dbvalue 为真,我想设置一个条件,然后在 db 中创建日志条目。 我写了下面的代码,它不起作用,dbvalue 是假的,但日志仍然在 db 中生成。

我在我的 startup.cs 文件中添加了这一行 GlobalDiagnosticsContext.Set("dbvalue", "false");

这是我的 nlog.config

<rules>
   <logger name="Microsoft.*" maxlevel="Info" final="true" writeTo="" />
 
   <logger name="*" minlevel="Info" writeTo="database" >
      <filters>
         <when condition="equals('${gdc:dbvalue}', 'true')" action="Log" />
      </filters>
   </logger>
</rules>

有人可以帮忙吗?

我可能会这样做:

<rules>
   <logger name="Microsoft.*" maxlevel="Info" final="true" writeTo="" />
 
   <logger name="*" minlevel="${gdc:dbLogMinLevel:whenEmpty=Off}" writeTo="database" />
</rules>

然后像这样启用数据库记录器:

NLog.GlobalDiagnosticsContext.Set("dbLogMinLevel","Info");
NLog.LogManager.ReconfigExistingLoggers(); // Explicit refresh active Logger-objects

另请参阅:https://github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules