2012年12月29日 星期六

NLog Config

NLog設定檔位置

NLog的設定檔有幾個位置,參考官網文件如下
  1. 應用程式的標準設定檔(app.config或是web.config)
    執行過程中如果需要修改NLog的配置,會造成應用程式重新啟動
  2. 應用程式所在目錄的app.exe.nlog
    每個專案都要手動指定檔名比較麻煩點
  3. 應用程式所在目錄的NLog.config
    建議使用的設定檔方式
  4. Nlog.dll所在目錄的NLog.dll.config
    和第三種方式差不多,還是選擇比較常見的第三種方式吧
  5. 環境變數NLOG_GLOBAL_CONFIG_FILE指定的檔案
    設在這種神秘的地方,應該會被扁吧
在ASP.NET或是Windows Form應用程式中有點差異,其他的專案類型有幾種方式不能用,所以建議使用最通用的第三種方式

NLog設定檔元素

Nlog的設定檔有以下五種元素,前兩種是必要項目,後三種是可選項目
  1. targets - 定義Log的輸出目標,輸出格式的Layout也在這裡設定
  2. rules - 定義Log的路由規則,Log的過濾條件也在這裡設定
  3. extensions - 定義擴充元件,包含NLog擴充模組和自定義的擴充模組
  4. include - 引用外部設定檔,簡化設定檔的複雜度和重覆利用
  5. variable - 定義設定檔中自行設定的變數,可以統一和簡化設定檔資料

NLog設定檔自動重讀

NLog的設定檔,在執行過程中預設是不會重讀的,每個修改都需要重新啟動應用程式才能生效
如果要自動重讀的話,需要設定一個屬性autoReload="true"才能生效

<nlog autoreload="true">
   ...
</nlog>

NLog設定檔疑難排解

有時後就算設好了設定檔,Log還是沒有寫出來,最常見的原因是權限問題造成的問題
例如ASP.NET的w3wp.exe沒有指定資料夾寫檔案的權限
這時後可以利用NLog內部的Log來查詢原因
  1. throwExceptions - 設定是否要引發錯誤
    NLog會吃掉所有內部引發的錯誤,要找問題時可以設為true,找到之後應該設回false
  2. internalLogFile - 設定內部錯誤要輸出的文件位置
    直接給一個檔名就好,會輸出在執行檔所在目錄下面
  3. internalLogLevel - 設定內部錯誤要輸出的層級
    基本上要找的是Error訊息比較簡潔點,不設定的話會輸出所有詳細訊息
  4. internalLogToConsole - 設定內部錯誤是否要輸出到Console視窗
    如果不想寫檔,又有Console可以用的話,那就設定為true吧
  5. internalLogToConsoleError - 設定內部錯誤是否要輸出到stderr串流
    為了不要和應用程式正常訊息混在一起,可以把錯誤訊息重導向到stderr

上一篇 : NLog 初體驗
下一篇 : NLog Targets