我很好奇log4NET如何使用%L来获取触发日志事件的行#。你能给我一些阐述吗?
感谢。
答案 0 :(得分:3)
它使用了the log4net documentation中描述的StackTrace。
请注意lognet文档中的警告:
警告生成来电者位置信息非常慢。除非执行速度不是问题,否则应避免使用它。
注意
System.Diagnostics.StackTrace类有关于发布版本的说法:
“使用Debug构建配置,StackTrace信息将提供最多信息。默认情况下,Debug构建包含调试符号,而Release版本则不包含。调试符号包含大部分文件,方法名称,行号和列信息。构造StackFrame和StackTrace对象。由于优化期间发生的代码转换,StackTrace可能不会报告与预期一样多的方法调用。“
这意味着在发布版本中,来电者信息可能不完整或根本不存在!因此,在发布版本中不能依赖调用者位置信息。