Skip to content

Log

文前言

基本上這篇是介紹各種我用過的東西
包含:NLog、log GUI 工具等等。

主文

NLog

core

官方文件:Getting started with ASP.NET Core 6 · NLog/NLog Wiki

ref: NLog 教學:快速建立自訂日誌紀錄(基礎篇). 嗨嗨,各位好,今天要介紹的是 NLog 這個 logging… | by Tom | appxtech | Medium

Framework:

  1. nuget 裝 NLogNLog.Schema
  2. 複製 raw.githubusercontent.com/NLog/NLog/v4.4/src/NuGet/NLog.Config/content/NLog.config 內文字,在跟 NLog.xsd 檔案同層位置新增檔案 NLog.config,貼上網址內東東後修改成自己想要的
  3. NLog.config 的屬性 設定:複製到輸出目錄 (Copy to Output Directory)有更新才複製 (Copy if newer)
  4. public static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

加上 stack trace 訊息:
c# - Customizing when to capture stack trace in NLog - Stack Overflow

使用上

// 不建議
_logger.LogInformation("{Account} 登入成功。", account);

// 建議
_logger.LogInformation($"{account} 登入成功。");

使用前者會得到訊息:
記錄訊息範本不應在與 'LoggerExtensions.LogInformation(ILogger, string?, params object?[])' 通話期間改變
CA2254: Template should be a static expression - .NET | Microsoft Learn

Claude 表示建議用後者原因:

這是 **結構化日誌 (Structured Logging)** vs **字串插值** 的經典差異,核心原因有以下幾點:

##### 1. 效能:延遲求值 (Lazy Evaluation)

結構化日誌只有在該 LogLevel 真的被啟用時,才會執行字串格式化。

而字串插值**在呼叫 LogInformation 之前就已經被 C# 編譯器組好字串了**。也就是說,即使你的 Log Level 設定為 Warning(不記錄 Information),這段字串組裝的成本還是會被浪費掉。

在高頻率呼叫的路徑(例如登入、API 進出點)這個差異會被放大。

##### 2. 結構化資料 vs 純文字

這是更關鍵的原因。使用 message template(`{Account}`)時,像 Serilog、Application Insights、Seq 這類 log sink 會把 `Account` 當作一個**獨立的欄位(property)** 儲存,而不只是塞進一句話裡。

這代表你日後可以:

- 依 `Account` 欄位做篩選、查詢(例如「找出這個帳號的所有登入紀錄」)
- 對同一個 template 的所有 log 做聚合統計
- 匯出成結構化格式(JSON)供 Log 分析系統使用

如果用字串插值,`account` 的值已經跟文字融合在一起,log 系統只看到一串死的文字,沒辦法反查或篩選。

##### 3. Message Template 快取

許多 logging provider(如 Serilog)會針對「相同的 template 字串」做內部快取/解析優化。用 `{Account}` 這種固定模板寫法,同一段程式碼每次呼叫時 template 都相同,只有參數值不同;而字串插值每次呼叫產生的都是全新字串,provider 無法辨識這是「同一種事件」的重複發生。

##### 4. 一致性與可維護性

團隊規模變大後,若統一使用 message template 風格,之後要串接 ELK、Seq、Application Insights 等系統做告警或儀表板時,可以直接以欄位為單位設定規則,而不需要用正規表達式從文字中「硬解析」帳號。

**結論**:字串插值只是「把值烤進字串裡」,結構化寫法則是保留了「事件 + 參數」的語意,讓 Log 從單純的文字紀錄,變成可查詢、可分析的資料。

tools

Log Parser Studio

Visual Log Parser

官網:Visual Log Parser

Log4View v2

官網:Log4View: log4view

  • 2025 還有更新,挺好用的,一個月免費試用
  • 據說過期後還會保留基本功能,拭目以待
  • 114/07/25 Edit:
    • 過期了,保留的基本功能也挺好用的,大概會繼續用下去吧。
    • 但有時候 log 非常簡單的話會跑去開文書編輯器 Notepad++ 比較快開
    • 但若是用到比如 core api 之類的有一大堆其他系統訊息,開這隻比較看得懂 (?

log viewer

官網:Styort/LogViewer: Log Viewer for Log4j/NLog

  • from 網友推薦

UPDATE LOG

114. 01/08 開新文章
06/02 加上 tools 段落
07/24 改換文章版面 (加上例行性 文前言&主文)
07/25 更新 tools > Log4View v2 感想
08/15 tools 內各種工具拉出 h4 版面

115. 07/21 NLog: 段落調整、加上 core 官方文件及 使用上