我必須從我的啟動類傳遞變數值
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