什麼是NLog ?
NLog 是一款開源的 .Net 平台 logging 套件,其提供了非常多樣化的 logging 方法,可以將 log 寫到File、Database、Email、Console等等,使得日誌記錄更加靈活多樣,而且提供簡單快速的設定方式,讓開發人員快速上手,也很容易修改 log 設定,同時擁有非常好的效能表現,不會對程式執行造成負擔。
另外 NLog 可以直接與 Microsoft.Extensions.Logging 結合,大大提升了在程式中導入 logging 的速度。
NLog 設定方法
NLog 提供了多種方法來設定,每種設定方法都有各自的優缺點,可依照專案需求或個人喜好自行選擇,相關文件可在下面連結中看到。
!本篇只介紹使用 NLog.config 設定檔來進行設定的方式!
使用 NLog.config 設定檔的優點
使用 NLog.config 設定檔來對 NLog 進行設定可說是好處多多
1. 易於維護、容易修改 : 設定檔內容與程式碼分離
2. 可擴充性高 : 只需要在設定檔中加入規則就可以擴充出不同的功能
3. 可攜性高 : 一份設定檔可以在多個不同的程式之間共用
4. 即改即生效: 設定檔修改後,完全不需要重新編譯程式即可產生效果這麼多的好處,一定要利用起來才對吧!!
導入 NLog 實作
!! (本篇在 .Net console app 中進行實作) !!
Nuget package 安裝
首先需要安裝以下幾個 nuget package
- NLog
- Microsoft.Extensions.Logging
在 Nuget 套件管理中搜尋 NLog 與 Microsoft.Extensions.Logging,將畫面中的套件選取並安裝。
基礎 NLog 運用
- 在 Program.cs 中將 NLog 設為 logging 時使用的 logger
2. 加入測試程式 -> Calculator class
3. 在專案目錄下新增 “NLog.config”
簡單來說,NLog.config 分成兩個區塊,分別是 <targets>、<rules>,
- <targets> : NLog 的主要設定內容就在這 <targets> 中,<targets> 內每一個 <target> 就是不同的輸出目標,決定了這個 <target> 的輸出類型(File, Mail, DB, Console …等等),每一種輸出類型也有各自的屬性可以設定,提供了非常豐富的靈活性與多樣性。
- <rules> : <rules> 提供了非常靈活的設定選項,允許我們指定不同的規則到,透過 “name” 屬性的設定,可以指定哪些 class 的 log 輸出到指定的 <target> 中,同時也可指定要套用的 log 等級等等。
- 透過以上兩大項的設定,就提供了開發人員千變萬化的 logging 選擇,能夠設定的屬性非常多,以滿足不同的需求,也因為屬性真的太多了,無法在這邊一一列舉,我在下面參考資料中提供了一些重要的文件連結共大家自行探索,會發現很多有趣的設定!!
- 以下是一個簡單的 NLog 設定檔
- <target> :
- name : 此 target 元件名稱,提供給 rule 指定時使用。
- xsi:type : 決定此 target 的輸出類型,此處有使用 file & console。
- filename : FileTarget 的屬性,決定 log 檔案產生時的名稱。 - <rule>:
- name : 透過名稱設定,決定可套用此規則的 class 有哪些,設定方式根據 namespace 與 class 名稱來做依據,使用 “ * ” 符號表示任意字元任意字數,使用 “ ? ” 符號表示一個任意字元,只要名稱規則匹配即可。
- minLevel : 表示套用此規則的最小 log 等級,只要比 minLevel 高,就會套用此等級,例如 minLevel 設 “Trace” 則全部 log 等級都適用此規則。
- level : 只指定單一的 log 等級
- final : final 設為 true,則進入此規則的 log 不會再去配對另外的規則。
- writeTo : 指定此規則要寫入的 target。
測試
執行此段程式後,會看到在 Console 中 log 兩個 Trace 紀錄
並且會在專案資料夾中 /bin/Debug/net6.0 中找到 fatal.log 檔案
這樣就成功在專案中加入 NLog 了,本篇內容就先到這邊。
log to file 能夠進行的設定可以參考下面參考資料的連結內容,有機會的話會在後幾篇回頭介紹,下一篇轉往使用 NLog 寄送 Email,還有 CloudWatch 與 Slack 通知等等功能~~