[C#.NET] 開發夥伴的除錯利器 NLog - Exception Layout Render (3)
NLog 的 Exception layout 令我驚豔的功能之一就是,它能幫我遞迴撈出 Inner Exception 的 Message,在使用上只需要設定 Target layout 區段的的 exception,官方的使用方式如下:
https://github.com/nlog/NLog/wiki/Exception-Layout-Renderer
範例如下:
fileName="${basedir}/App_Data/logs/${shortdate}.log" layout="發生時間:${longdate}${newline}發生類別:${logger}${newline}訊息內容:${message}${newline}方法追蹤:${stacktrace:format=DetailedFlat:topFrames=3:skipFrames=0:separator=-->}${newline}例外堆疊:${exception:innerFormat=ToString:maxInnerExceptionLevel=20:innerExceptionSeparator===>:separator===>:format=ToString}${newline}=============================================================" />
PS.${}都要寫在同一行,否則排版會亂掉。
另外,也可以將共用的 layout 組態寫在 variable,完整範例如下:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="true" throwExceptions="false" internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"> <variable name="targetLayer4" value="發生時間:${longdate}${newline}發生類別:${logger}${newline}訊息內容:${message}${newline}方法追蹤:${stacktrace:format=DetailedFlat:topFrames=3:skipFrames=0:separator=-->}${newline}例外堆疊:${exception:innerFormat=ToString:maxInnerExceptionLevel=20:innerExceptionSeparator===>:separator===>:format=ToString}${newline}=============================================================" /> <targets > <target name="elmah" xsi:type="ElmahMsSql" layout="${targetLayer4}" connectionStringName="elmah-sqlserver" /> <target xsi:type="File" name="file" fileName="${basedir}/App_Data/logs/${shortdate}.log" layout="${targetLayer4}" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="file" /> <logger name="*" minlevel="Debug" writeTo="elmah" /> </rules> </nlog>
在應用程式端,則是調用 Error 方法,在 NLog 4.0 以後的版本,官網也有說明 NLog 4.0 應該要用哪一個多載方法
https://github.com/nlog/NLog/wiki/How-to-log-exceptions
文章出自:http://www.dotblogs.com.tw/yc421206/archive/2015/11/02/153770.aspx
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET