NLog 内部异常记录

NLog Inner Exception Logging

我正在尝试使用 NLog 记录内部异常消息。这是我的 NLog.config 文件的一部分:

    <target name="errors" xsi:type="File" layout="${longdate}${newline}
        - Exception Message: ${exception:format=Message}${newline}
        - InnerException Message: ${exception:innerExceptionSeparator=TEXT}${newline}"
        fileName="\Logs\errors-${shortdate}.log"
       concurrentWrites="true" />
    </targets>

对于 NLog.config[=22 的 Exception MessageInnerException Message 行,我收到相同的消息 See the inner exception for details =] 文件.

这对我有用:

  <target name="errors" xsi:type="File" layout="
            ${message}
            ${onexception:EXCEPTION OCCURRED\:
            ${exception:format=type,message,method:maxInnerExceptionLevel=5:innerFormat=shortType,message,method}}"
            fileName="\Logs\errors-${shortdate}.log"
            concurrentWrites="true"
            />
  </targets>

属性 说明:

  • ${exception:maxInnerExceptionLevel=N} - 控制记录多少内部异常。为了向后兼容,默认为零。
  • ${exception:innerExceptionSeparator=TEXT} - 定义分隔内部异常的文本。默认为换行字符串(特定于平台)。
  • ${exception:innerFormat=FORMATSTRING} - 定义内部异常的格式与 ${exception:format=FORMATSTRING} 定义顶级异常的格式相同。如果未指定此参数,则对顶级异常和内部异常使用相同的格式。

这里是官方的Nlog Documentation用于记录内部异常

另一种可能性是在内部异常之间添加新行是在 xml 中使用换行符 &#xD;&#xA,因为 innerExceptionSeparator 未以某种特殊方式解析并按原样加载是写的。所以 innerExceptionSeparator=${newline} 将不起作用。

layout="${message}${onexception:${newline}${exception:maxInnerExceptionLevel=10:innerExceptionSeparator=&#xD;&#xA;&#x9;:format=shortType,message}} 

这将导致内部异常文本从新行开始并按制表符缩进

然而,这仅在使用 ILogger.Error(Exception, string) 方法时有效。 ILogger.Error(Exception) 忽略此布局