【问题标题】:log4net getting ? instead of method name randomlylog4net 得到?而不是随机的方法名称
【发布时间】:2017-10-06 21:50:57
【问题描述】:

我有 .net 4.5.2 应用程序,我正在使用 log4net 1.2.15.0 版本(即使在 2.0.8 中) 我在方法名称中有随机行为?在我的文本文件中 我已经尝试了 %M 或 %method 并且此行为随机再次发生 我的 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 信息 [4] 服务管理器。? - 来自 aaa 的套接字连接回复,在套接字连接尝试 1 时为 True

请帮我找出问题所在

【问题讨论】:

  • 你能用示例代码复制这个吗?就像使用此配置的简单控制台应用程序一样。
  • 无法在我的开发机器上重现它(Windows 10)。但是我们的多个生产 Windows 2012 R2 服务器在其中我有多个应用程序(一些 Windows 服务和几个 WCF 应用程序)它随机重现
  • @KamranShahid 您是否尝试过编写控制台应用程序并从远程机器运行它?没有什么是随机发生的,更多的是触发因素可能非常罕见,以至于难以追踪。

标签: log4net


【解决方案1】:

这是documented behaviour

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

StackTrace 信息将在 Debug 构建配置中提供最多信息。默认情况下,Debug 版本包含调试符号,而 Release 版本不包含。调试符号包含用于构造 StackFrame 和 StackTrace 对象的大部分文件、方法名称、行号和列信息。由于优化期间发生的代码转换,StackTrace 可能不会报告预期的方法调用次数。

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

文档还说:

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

【讨论】:

  • 所以这意味着在我们部署在生产环境中的 Release Build 中我们无法保证方法名称?
  • 这很奇怪。谢谢斯图尔特
  • 好吧,您可以禁用代码优化,向方法添加/或添加 [MethodImpl(MethodImplOptions.NoInlining)] 属性,但这是我个人不会做出的权衡。
  • 在我的应用程序中,我必须非常关心性能,所以我不能在那里做。但它可能会对性能不那么重要的其他地方有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多