我有.net 4.5.2应用程序,我使用的是log4net 1.2.15.0版本(即使在2.0.8中) 我有随机行为,我得到的方法名称?在我的文本文件中 我已尝试%M或%方法,此行为随机重现 我的Appender设置是
<appender name="MyApp" type="log4net.Appender.RollingFileAppender" >
<file value="..\\Logs\\MyApp.txt" />
<appendToFile value="true" />
<datePattern value="yyyyMMdd" />
<rollingStyle value="Date" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<filter type="log4net.Filter.LevelRangeFilter">
<acceptOnMatch value="true" />
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff} %10p [%2t] %5c{1}.%method - %m%n" />
<!-- <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff} %10p [%2t] %5c{1}.%M - %m%n" /> -->
</layout>
</appender>
日志文件中的示例输出文本是 2017-08-22 07:13:08.668 INFO [4] ServicesManager。? - 来自aaa的套接字连接回复,在套接字连接尝试1时为True
请帮我找出问题所在
答案 0 :(得分:2)
以下模式
%type %file %line %method %location %class %C %F %L %l %M
都会生成来电者位置信息。位置信息使用System.Diagnostics.StackTrace类生成调用堆栈。然后从该堆栈中提取呼叫者的信息。StackTrace信息将为Debug构建配置提供最丰富的信息。默认情况下,Debug构建包括调试符号,而Release构建则不包括。调试符号包含构造StackFrame和StackTrace对象时使用的大部分文件,方法名称,行号和列信息。由于优化期间发生的代码转换,StackTrace可能不会报告与预期一样多的方法调用。
这意味着在发布版本中,来电者信息可能不完整或根本不存在! 因此,在发布版本中无法依赖来电者位置信息。
文档还说:
生成来电者位置信息非常慢。除非执行速度不是问题,否则应避免使用它。