log4net得到了什么?而不是方法名称随机

时间:2017-08-22 12:08:47

标签: log4net

我有.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

请帮我找出问题所在

1 个答案:

答案 0 :(得分:2)

这是documented behaviour

  

以下模式%type %file %line %method %location %class %C %F %L %l %M都会生成来电者位置信息。位置信息使用System.Diagnostics.StackTrace类生成调用堆栈。然后从该堆栈中提取呼叫者的信息。

     

StackTrace信息将为Debug构建配置提供最丰富的信息。默认情况下,Debug构建包括调试符号,而Release构建则不包括。调试符号包含构造StackFrame和StackTrace对象时使用的大部分文件,方法名称,行号和列信息。由于优化期间发生的代码转换,StackTrace可能不会报告与预期一样多的方法调用。

     

这意味着在发布版本中,来电者信息可能不完整或根本不存在! 因此,在发布版本中无法依赖来电者位置信息。

文档还说:

  

生成来电者位置信息非常慢。除非执行速度不是问题,否则应避免使用它。