2022-08-01 11:37

[轉載] NLog Variables

轉載自:當條件等于不作業時.net核心Nlog過濾器

我必須從我的啟動類傳遞變數值

  1. LogManager.Configuration.Variables["environment"] = "Development"; 

我在我的 nlog.config 檔案中添加了以下過濾器

  1. <rules> 
  2.    <logger name="*" minlevel="Error" writeTo="logfile"> 
  3.        <filters> 
  4.            <when condition="equals('${var:environment}', 'Development')" action="Ignore" /> 
  5.        </filters> 
  6.    </logger> 
  7. </rules> 

即使我將值作為 Development 傳遞,該訊息仍會被記錄而不是忽略。

但是,當我對它的作業值進行硬編碼時

您在 NLog中發現了一個錯誤,但如果您這樣做,它應該可以作業(也會更快):

  1. <rules> 
  2.    <logger name="*" minlevel="Error" writeTo="logfile"> 
  3.        <filters defaultAction='log'> 
  4.            <when condition="'${var:environment}' == 'Development'" action="Ignore" /> 
  5.        </filters> 
  6.    </logger> 
  7. </rules> 

您也可以用 minLevel="${var:EnvironmentMinLevel:whenEmpty=Error}" 處理,這比 <filters> 快得多

  1. <rules> 
  2.    <logger name="*" minlevel="${var:EnvironmentMinLevel:whenEmpty=Error}" writeTo="logfile" /> 
  3. </rules> 

設定 Variables 要記得呼叫 Reconfig,或者在 config 中設定 autoReload="true"

  1. NLog.LogManager.Configuration.Variables["EnvironmentMinLevel"] = "Off"; 
  2. NLog.LogManager.ReconfigExistingLoggers(); 

另請參閱 https://github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules