[C#.NET] 開發夥伴的除錯利器 NLog - Exception Layout Render (3)

[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

image

 

範例如下:


        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

image

 


文章出自:http://www.dotblogs.com.tw/yc421206/archive/2015/11/02/153770.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo