星期四, 6月 16, 2022

[C#] NLog - Layout Renderers

延續 [C#] NLog - Targets 和 Rules 該篇筆記,這篇主要記錄 Layout Renderers 使用

Exception layout renderer

NLog 內可以透過該 Renderer 來抓出 Exception 相關資訊,設定語法如下
${exception:
format=String:
innerFormat=String:
maxInnerExceptionLevel=Integer:
innerExceptionSeparator=String:
separator=String:
exceptionDataSeparator=string}
參數使用重點
  • format:預設為 ToString()、Data
  • maxInnerExceptionLevel:顯示 InnerException 資訊層深度,預設為 0

全域變數

NLog 有提供 GlobalDiagnosticsContext 可以視情況把相關變數塞進 Context 去,應用在 Layout Renderers 內

把自訂錯誤訊息寫進指定路徑的 txt 檔案

該範例內有把使用者相關資訊塞進 GlobalDiagnosticsContext 內,並透過 Gdc layout renderer 抓出來使用
using NLog;
using System;

namespace NLogSample
{
    internal class Program
    {
        // 透過 LogManager.GetCurrentClassLogger() 取得 NLog 設定檔
        private static readonly Logger _logger = LogManager.GetCurrentClassLogger();

        static void Main(string[] args)
        {
            GlobalDiagnosticsContext.Set("GlobalVar", "使用者相關資訊");
            ExceptionConfig();

            try
            {
                ExceptionMethod();
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
            }
        }

        private static void ExceptionMethod()
        {
            int numerator = 1;
            int denominator = 0;
            Console.WriteLine(numerator / denominator);
        }

        private static void ExceptionConfig()
        {
            var config = new NLog.Config.LoggingConfiguration();

            var exceptionFile = new NLog.Targets.FileTarget("execptionfile")
            {
                FileName = "${basedir}/App_Data/Logs/${shortdate}/ExceptionFile.txt",
                // exception renderer 
                //  1. format:預設為 ToString()、Data
                //  2. maxInnerExceptionLevel:顯示 InnerException 資訊層深度,預設為 0
                Layout = @"
                    發生時間:${longdate}${newline}
                    電腦名稱:${machinename}${newline}
                    全域變數:${gdc:item=globalvar}${newline}$
                    {exception:maxInnerExceptionLevel=5}"
            };
            config.AddRule(LogLevel.Trace, LogLevel.Fatal, exceptionFile);

            LogManager.Configuration = config;
        }
    }
}

範例結果 1 - Exception 檔案所在路徑:NLog 會自行建立相關路徑資料夾,不需要特別去建立,但要特別注意是否有具有相關權限

[C#] NLog - Layout Renderers-1

範例結果 2-Exception 內自訂錯誤訊息:透過 Gdc Layout Renderer 把使用者資訊整合進錯誤訊息

[C#] NLog - Layout Renderers-2

全部 Layout Renderers 使用,可以在官方文章-Layout Renderers 內找到,另外還有每一個 Renderer 參數使用範例喔

沒有留言:

張貼留言