NLog WebServiceTarget:StackTrace 为空
NLog WebServiceTarget: StackTrace null
将 MailTarget
与自定义 LayoutRenderer
一起使用时,我可以看到 LogEventInfo.StackTrace
包含随后可以包含在呈现的响应中的数据。
但是,将 MailTarget
替换为 WebServiceTarget
并使用相同的自定义 LayoutRenderer
LogEventInfo.StackTrace
现在 returns null
两个目标都是 "stock" NLog 实现,正在使用相同的 LayoutRenderer
从相同的代码调用
有没有其他人遇到过同样的问题? WebServiceTarget
是否存在某些阻止堆栈跟踪被捕获的限制?
解决方案,基于以下 Rolf 的建议:
public sealed class MyLayoutRenderer : LayoutRenderer, IUsesStackTrace
{
public StackTraceUsage StackTraceUsage => StackTraceUsage.Max;
....
}
如果您使用像 Ex 这样的布局渲染器,NLog 只会为目标捕获并提供 StackTrace。 ${callsite}
.
如果您有自定义布局渲染器,那么您可以继承自 NLog.Internal.IUsesStackTrace
(以及 return StackTraceUsage.Max
)
将 MailTarget
与自定义 LayoutRenderer
一起使用时,我可以看到 LogEventInfo.StackTrace
包含随后可以包含在呈现的响应中的数据。
但是,将 MailTarget
替换为 WebServiceTarget
并使用相同的自定义 LayoutRenderer
LogEventInfo.StackTrace
现在 returns null
两个目标都是 "stock" NLog 实现,正在使用相同的 LayoutRenderer
有没有其他人遇到过同样的问题? WebServiceTarget
是否存在某些阻止堆栈跟踪被捕获的限制?
解决方案,基于以下 Rolf 的建议:
public sealed class MyLayoutRenderer : LayoutRenderer, IUsesStackTrace
{
public StackTraceUsage StackTraceUsage => StackTraceUsage.Max;
....
}
如果您使用像 Ex 这样的布局渲染器,NLog 只会为目标捕获并提供 StackTrace。 ${callsite}
.
如果您有自定义布局渲染器,那么您可以继承自 NLog.Internal.IUsesStackTrace
(以及 return StackTraceUsage.Max
)