只有累積,沒有奇蹟

2024年11月28日 星期四

[NET] 如何在 NLog 進行偵錯

發生情境
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. 在程式中設定
  1. static void Main()
  2. {
  3. LogManager.ThrowExceptions = true;
  4.  
  5. Logger logger = LogManager.GetCurrentClassLogger();
  6. logger.Info("Start");
  7. logger.Info("This is a book");
  8. }

偵錯方法 : 開啟 NLog Internal Logging 設定
NLog 有自己的 logging 機制可以提供偵錯及除錯使用一般我們常用的都是 NLog.Logger 類別來記錄訊息,在需要使用內部 Logging 機制時可以用 InternalLogger 類別,使用上與 Logger 有點相似需要定義 LoggerLevel, Logger FileName 等資訊,在偵錯時可以設定以下兩個 attribute 設定紀錄 internalLogger 的錯誤訊息 ( 亦可在 NLog 檔案設定 )
1. internalLogFile : 設定 internalLogging 時檔案寫入的位置
2. internalLogLevel : 設定需要寫入的 Log Rule level
  1. static void Main()
  2. {
  3. InternalLogger.LogFile = "c:\\Logs\\log.txt";
  4. InternalLogger.LogLevel = LogLevel.Error;
  5. }
  6.  

後記
透過以上設定就可以看到 NLog 內部的錯誤訊息,可以更明確的知道程式爆炸的地方
舉例以一開始幫同事 Debug 的案例如下圖,發現他的NLog file copy 別專案的config內容,但未 copy 到 NLog_ELK的config內容導致 LogManager 讀取失敗發生 FileNotFount exception宣告結案 !!!




參考
Logging Troubleshooting
NLog
NLog Tutorial
NLog internalLogging

Related Posts:

  • [.NET] ILSpy 程式碼反組譯工具 前言 昨天上保哥非同步課程時有提到反組譯工具 ILSpy,詢問上課的學生發現聽過與使用過的並不多,聽到這點覺得有點訝異,自己曾在某間公司任職時因為 Production 上的重要程式沒有版控,僅能透過反組譯工具 ILSpy 或是 .NET Reflector 得知程式邏輯進而重寫該專案,後來 .NET Reflector 改收費後就都不在使用,這邊就針對 ILSpy 工具做簡單介紹與說明,若有問題歡迎提出一起討論或是給予指導。 … Read More
  • [.NETCore] 安裝 Entity Framework Core - 使用 EF Core Power Tool前言 在上一篇介紹了 安裝 Entity Framework Core 文章中說明如何透過指令方式產生 DBContext 物件,今天在搜尋 EF Core 相關資料時發現 mkrt 大推薦的工具 - Visual Studio 2017 擴充功能 - EF Core Power Tools,原來除了指令之外也可以透過擴充工具達到同樣結果,打鐵要趁熱,這篇文章就來介紹如何使用 EF Core Power Tools,若有問題歡迎提出一起… Read More
  • [.NETCore] 安裝 Entity Framework Core前言 最近在開發專案時要在 .NET Core 下使用 ORM 進行資料庫操作,第一直覺當然是用微軟強大的 Entity Framework 來解決,但實際操作後發現在 ASP.NET Core 下建立 Entity Framework Core 目前沒有過去 .NET Framework 下 Entity Framework 6.x 操作上來的方便,這篇文章就來介紹安裝 Entity Framework … Read More
  • [UnitTest] ASP.NET Core 2.2 測試專案中的版本衝突 問題  這幾天專案某項功能接近尾聲,要替其核心 ASP.NET Core 專案加上單元測試專案,加入後按下建置發現跳出 Error 錯誤訊息  "CS1705 Assembly 'xxxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'Microsoft.Extensions.Logging.Abstractions, Version=2.… Read More
  • [.NETCore] ASP.NET Core 學習資源包 - awesome dotnetcore前言 最近比較多機會嘗試有興趣的新技術,在學習過程中勢必會遇到很多疑難雜症;像是最近新專案使用 ASP.NET Core 開發,有些觀念如果你 ASP.NET Framework 習慣了轉到新的會需要點時間,這時如果有份清單整理技術領域相關內容是在好不過的了;今天要分享的是 github 上的 awesome dotnet core,集合群眾的力量整理 ASP.NET Core 的學習資源與相關 Library 資訊,另外如果有好康的想要分享給大… Read More

0 意見:

張貼留言

Copyright © 2025 m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com