NLog 教學:快速建立自訂日誌紀錄(基礎篇)

Tom
appxtech
Published in
6 min readMay 17, 2023

嗨嗨,各位好,今天要介紹的是 NLog 這個 logging 工具,最近在實習時遇到的專案中有使用 NLog 的需求,所以就來研究 NLog 的寫法,並把內容記錄下來,供大家參考~

什麼是NLog ?

NLog 是一款開源的 .Net 平台 logging 套件,其提供了非常多樣化的 logging 方法,可以將 log 寫到File、Database、Email、Console等等,使得日誌記錄更加靈活多樣,而且提供簡單快速的設定方式,讓開發人員快速上手,也很容易修改 log 設定,同時擁有非常好的效能表現,不會對程式執行造成負擔。

另外 NLog 可以直接與 Microsoft.Extensions.Logging 結合,大大提升了在程式中導入 logging 的速度。

NLog 設定方法

NLog 提供了多種方法來設定,每種設定方法都有各自的優缺點,可依照專案需求或個人喜好自行選擇,相關文件可在下面連結中看到。

  1. 使用 XML 設定檔 : NLog.config — 文件連結
  2. 在程式內設定 — 文件連結
  3. 使用 appsettings.json 設定 — 文件連結

!本篇只介紹使用 NLog.config 設定檔來進行設定的方式!

使用 NLog.config 設定檔的優點

使用 NLog.config 設定檔來對 NLog 進行設定可說是好處多多
1. 易於維護、容易修改 : 設定檔內容與程式碼分離
2. 可擴充性高 : 只需要在設定檔中加入規則就可以擴充出不同的功能
3. 可攜性高 : 一份設定檔可以在多個不同的程式之間共用
4. 即改即生效: 設定檔修改後,完全不需要重新編譯程式即可產生效果

這麼多的好處,一定要利用起來才對吧!!

導入 NLog 實作

!! (本篇在 .Net console app 中進行實作) !!

Nuget package 安裝

首先需要安裝以下幾個 nuget package

  • NLog
NLog
  • Microsoft.Extensions.Logging
Microsoft.Extensions.Logging

在 Nuget 套件管理中搜尋 NLog 與 Microsoft.Extensions.Logging,將畫面中的套件選取並安裝。

基礎 NLog 運用

  1. 在 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 設定檔
簡單的 NLog.config
  • <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 通知等等功能~~

參考資料

--

--

Tom
appxtech
Writer for

Major in Computer Science, Web Backend Engineer