将MailTarget
与自定义LayoutRenderer
一起使用时,我可以看到LogEventInfo.StackTrace
包含可以包含在呈现的响应中的数据。
但是,用MailTarget
替换WebServiceTarget
并使用相同的自定义LayoutRenderer
LogEventInfo.StackTrace
现在将返回null
这两个目标都是“常规” NLog实现,正在使用相同的LayoutRenderer
从相同的代码调用
还有其他人遇到过同样的问题吗? WebServiceTarget
是否有某些限制可以阻止捕获堆栈跟踪信息?
解决方案基于Rolf的以下建议:
public sealed class MyLayoutRenderer : LayoutRenderer, IUsesStackTrace
{
public StackTraceUsage StackTraceUsage => StackTraceUsage.Max;
....
}
最佳答案
如果使用的是诸如Ex之类的布局渲染器,则NLog仅捕获并为目标提供StackTrace。 ${callsite}
。
如果您有一个自定义的布局渲染器,则可以从NLog.Internal.IUsesStackTrace
继承(并返回StackTraceUsage.Max
)