C# NLog 套件的設定

January 22, 2024

NLog 是一套 Open Source 的 Log 工具,支援多種 .Net 平台,使用上簡單又具備調整的彈性。

可以跟著 NLog 官網教學安裝。安裝好 NLog 後,可以藉由調整 nlog.config 來調整 Log 的格式。以下介紹 nlog.config 檔案的常用設定值 (也可直接查詢 Configuration file · NLog/NLog Wiki)。

Target 功能

指定訊息要輸出的目標,常用的 target 如下:

Target 描述
Console 顯示在命令列上
File  寫入文字檔案
MailKit  寄送 SMTP 郵件訊息
Memory 存放訊息在 ArrayList

Rule 功能

Rule 功能可以限制不同等級的訊息輸出到特定的目標 (Target) ,如檔案或網路位址。

部分會用到的 Rule 元素如下:

元素 說明
name  要記錄的類別名稱,可接受萬用字元 * 和 ?
minlevel  要記錄的最小等級
maxlevel  要記錄的最大等級
writeTo 要寫入的 Target
final (此類別) 最後適用的規則,列在後方的不處理

Layout 功能

Layout 功能是依照特定標籤和格式顯示 Log,標籤可稱為 Layout Renderer,包含多種實用的除錯內容。

部分會使用到的 Layout 標籤如下:

標籤 描述 連結
aspnet-request-url
顯示需求的 URL,預設顯示 Scheme, Host 和 Path,可另外顯示 Port 和 Query String AspNetRequest Url Layout Renderer · NLog/NLog Wiki · GitHub
activity
.NET 分散式追蹤的列舉,可以加入 property=TraceId 顯示個別 API 請求的 Trace ID GitHub - NLog/NLog.DiagnosticSource
level 訊息等級 Level layout renderer · NLog/NLog Wiki · GitHub
longtime 以 yyyy-MM-dd HH:mm:ss.ffff 格式顯示時間 Longdate Layout Renderer · NLog/NLog Wiki · GitHub
message 訊息內容 Message Layout Renderer · NLog/NLog Wiki · GitHub
pad
顯示時內容固定寬度,不足時以空格補充 Pad Layout Renderer · NLog/NLog Wiki · GitHub
replace-newlines
取代換行字元,預設為空白 Replace NewLines Layout Renderer · NLog/NLog Wiki · GitHub
truncate
內容超過指定長度時,截斷後方內容 I want to truncate message layout renderer after 30 characters in database logging.Any suggestion? · Issue #3040 · NLog/NLog · GitHub

詳細列表可以參考:Layout Renderers - Config - NLog

Log 等級

NLog 的 Log 等級可以分成以下幾種,順序越大表示嚴重性越高:

等級 順序 說明
Trace 0 通常用在開發程式的觀察
Debug 1 用於除錯想檢查的部分
Info 2 標示出應用程式的重要事件
Warn 3 警告驗證問題或是可被還原的暫時性錯誤
Error 4 例外發生或功能失效
Fatal 5 最嚴重等級,應用程式將要停止運作

加入 Trace ID

若想加入每個 API 請求的 Trace ID,以增加除錯的觀察性,可以安裝 NLog.DiagnosticSource  套件:GitHub - NLog/NLog.DiagnosticSource 。這個套件是 Microsoft Activity Trace (.NET 分散式追蹤) 的 NLog Layout Renderer。

可以透過 NuGet 管理員安裝套件,並在 nlog.config 內加入:

<extensions>
    <add assembly="NLog.DiagnosticSource"/>
</extensions>

即安裝完成。