我正在使用NLog 4.4.5在我的Owin Web Api 2项目中执行一些异常日志记录,并且我希望包含我的异常的部分堆栈跟踪(即顶部日志中的n帧堆栈。
我目前的布局如下:
layout="${longdate} | ${pad:padding=5:inner=${level:uppercase=true}} | ${logger} | ${message} ${onexception:| ${exception:format=ShortType, Message, StackTrace}}"
我已经知道NLog允许在global ${stacktrace}
renderer中通过topFrames
属性进行此类配置:
${stacktrace:format=Enum:topFrames=Integer:skipFrames=Integer:separator=String
但是,当使用异常布局渲染器的StackFrame
格式属性(这是执行异常日志记录的推荐方法)时,文档未指定与{{1}的等效项用于过滤堆栈跟踪的显示。
有没有人找到解决方法?
答案 0 :(得分:1)
如果没有代码,这确实是不可能的。 ${stacktrace}
渲染器,呈现日志调用的堆栈跟踪,而不是异常。
但是有了一些代码,这是可能的。此示例使用NLog 4.4:
ExceptionLayoutRenderer
AppendStackTrace
方法。e.g。
[LayoutRenderer("myException")]
[ThreadAgnostic]
public class MyExceptionLayoutRenderer : ExceptionLayoutRenderer
{
//new option, settable from config
public int StackDepth {get;set;}
protected override void AppendStackTrace(StringBuilder sb, Exception ex)
{
//sb.Append(...)
}
}
LayoutRenderer.Register<MyExceptionLayoutRenderer>("myException")
用法${myException:format=ShortType, Message, StackTrace:StackDepth=3}