NLog 是在.NET 開發者中很受歡迎的 Open Source,支援 .NET Framework 和 .NET Core,安裝上可以很簡單的透過 Nuget 安裝下載使用,透過 NLog 定義的 Configure 定義專案自行紀錄/輸出的 Log Level 格式
,近同事反應在開發新專案使用上遇到離奇的事情,在使用 NLog 寫錯誤訊息時沒有辦法正常寫入到檔案中,NLog 在遇到問題時預設是不會 throw exception 的,需要打開 NLog config 的 root element 一些設定
,以下簡單紀錄幫忙偵錯 NLog 的過程及該如何處理
偵錯方法 : 開啟 throwExpections = true
NLog 在遇到問題時預設是不會 throw exception,偵錯時可以開啟 throwExceptions = "true" 的設定,讓我們在除錯過程中知道 NLog 的錯誤訊息,可以透過以下兩種方式設定
1. NLog Config
在 NLog config 的根 element 定義 throwExceptions = true
2. 在程式中設定
static void Main() { LogManager.ThrowExceptions = true; Logger logger = LogManager.GetCurrentClassLogger(); logger.Info("Start"); logger.Info("This is a book"); }
偵錯方法 : 開啟 NLog Internal Logging 設定
NLog 有自己的 logging 機制可以提供偵錯及除錯使用,一般我們常用的都是 NLog.Logger 類別來記錄訊息,在需要使用內部 Logging 機制時可以用 InternalLogger 類別,使用上與 Logger 有點相似需要定義 LoggerLevel, Logger FileName 等資訊,在偵錯時可以設定以下兩個 attribute 設定紀錄 internalLogger 的錯誤訊息 ( 亦可在 NLog 檔案設定 )
1. internalLogFile : 設定 internalLogging 時檔案寫入的位置
2. internalLogLevel : 設定需要寫入的 Log Rule level
static void Main() { InternalLogger.LogFile = "c:\\Logs\\log.txt"; InternalLogger.LogLevel = LogLevel.Error; }
後記
透過以上設定就可以看到 NLog 內部的錯誤訊息,可以更明確的知道程式爆炸的地方
舉例以一開始幫同事 Debug 的案例如下圖,發現他的NLog file copy 別專案的config內容,但未 copy 到 NLog_ELK的config內容導致 LogManager 讀取失敗發生 FileNotFount exception,宣告結案 !!!
參考
Logging Troubleshooting
NLog
NLog Tutorial
NLog internalLogging
0 意見:
張貼留言