生产时 NLog 日志中的行号消失了

问题描述 投票:0回答:2

我使用 ${callsite} 参数配置了 NLog 布局以具有方法名称和行号,并且它在本地运行良好,如下所示。

Application_Start(Global.asax.cs:33)

但它正在更改为

Application_Start
,没有生产线号。我想这是因为它无法在没有 .pdb 文件的情况下访问行号,但我正在使用 .NET 4.5,它可以通过调用方属性在没有 .pdb 文件的情况下访问行号。据我了解,NLog 尚未针对 .NET 4.5 进行自身优化。

有没有办法使用 NLog 将行号放入 .NET 4.5 的生产环境中?

c# .net-4.5 nlog
2个回答
3
投票

NLog 不使用 .NET 4.5 中的新属性

它使用 StackTrace 类。

这从源代码中可以明显看出。

因此,您需要 .pdb 文件作为行号。


0
投票

NLog v5 添加了对使用 Caller Info-Attributes 的支持,因此添加 ${callsite} 将不需要捕获完整的 StackTrace。

使用 NLog v5 记录呼叫者信息成员属性的示例:

_logger.ForInfoEvent()
       .Message("This is a fluent message {0}", "test")
       .Property("PropertyName", "PropertyValue")
       .Log();  // Log-method captures the callsite

注意,可以考虑指定

${callsite:captureStackTrace=false}
以确保 NLog 永远不会自动捕获完整的 StackTrace,以防日志语句未提供调用者成员信息。

© www.soinside.com 2019 - 2024. All rights reserved.