【问题标题】:NLog WebServiceTarget: StackTrace nullNLog WebServiceTarget: StackTrace null
【发布时间】:2025-12-08 20:05:01
【问题描述】:

当使用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; 

    ....
}

【问题讨论】:

    标签: c# .net logging nlog


    【解决方案1】:

    NLog 仅捕获并提供目标的 StackTrace,如果您使用像 Ex 这样的布局渲染器。 ${callsite}.

    如果你有自定义布局渲染器,那么你可以从NLog.Internal.IUsesStackTrace 继承(并返回StackTraceUsage.Max

    【讨论】: