我使用 ${callsite} 参数配置了 NLog 布局以具有方法名称和行号,并且它在本地运行良好,如下所示。
Application_Start(Global.asax.cs:33)
但它正在更改为
Application_Start
,没有生产线号。我想这是因为它无法在没有 .pdb 文件的情况下访问行号,但我正在使用 .NET 4.5,它可以通过调用方属性在没有 .pdb 文件的情况下访问行号。据我了解,NLog 尚未针对 .NET 4.5 进行自身优化。
有没有办法使用 NLog 将行号放入 .NET 4.5 的生产环境中?
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,以防日志语句未提供调用者成员信息。