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 檔案
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 會自行建立相關路徑資料夾,不需要特別去建立,但要特別注意是否有具有相關權限
範例結果 2-Exception 內自訂錯誤訊息:透過 Gdc Layout Renderer 把使用者資訊整合進錯誤訊息
全部 Layout Renderers 使用,可以在官方文章-Layout Renderers 內找到,另外還有每一個 Renderer 參數使用範例喔
沒有留言:
張貼留言