我必須從我的啟動類傳遞變數值
LogManager.Configuration.Variables["environment"] = "Development";
我在我的 nlog.config 檔案中添加了以下過濾器
<rules>
<logger name="*" minlevel="Error" writeTo="logfile">
<filters>
<when condition="equals('${var:environment}', 'Development')" action="Ignore" />
</filters>
</logger>
</rules>
即使我將值作為 Development 傳遞,該訊息仍會被記錄而不是忽略。
但是,當我對它的作業值進行硬編碼時
您在 NLog中發現了一個錯誤,但如果您這樣做,它應該可以作業(也會更快):
<rules>
<logger name="*" minlevel="Error" writeTo="logfile">
<filters defaultAction='log'>
<when condition="'${var:environment}' == 'Development'" action="Ignore" />
</filters>
</logger>
</rules>
您也可以用 minLevel="${var:EnvironmentMinLevel:whenEmpty=Error}" 處理,這比 <filters> 快得多
<rules>
<logger name="*" minlevel="${var:EnvironmentMinLevel:whenEmpty=Error}" writeTo="logfile" />
</rules>
設定 Variables 要記得呼叫 Reconfig,或者在 config 中設定 autoReload="true"
NLog.LogManager.Configuration.Variables["EnvironmentMinLevel"] = "Off"; NLog.LogManager.ReconfigExistingLoggers();
另請參閱 https://github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules