【问题标题】:log4net does not roll over the log file sometimes when rollingstyle set to date当rollingstyle设置为日期时,log4net有时不会翻转日志文件
【发布时间】:2011-01-27 17:32:55
【问题描述】:

我有一个使用 log4net 进行日志记录的 Windows C# 应用程序。这是记录器的配置方式:

 <log4net>
    <appender name="DebugFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Local\logs\ApplnTrace.log" />
      <threshold value="INFO" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%5p] - (%file:%line) %m%n" />
      </layout>
    </appender>
    <appender name="MSGFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value=".\local\logs\MsgTrace.log" />
      <threshold value="INFO" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d %n%m%n" />
      </layout>
    </appender>
    <logger name="ApplnLogger">
      <appender-ref ref="DebugFileAppender" />
    </logger>
    <logger name="MsgLogger">
      <appender-ref ref="MSGFileAppender" />
    </logger>
 </log4net>

文件有时会根据日期滚动,有时不滚动,当文件未滚动时,日志记录也会停止。谁能帮我找出原因?

【问题讨论】:

    标签: log4net log4net-configuration


    【解决方案1】:

    log4Net 旨在悄悄地失败。当事情停止工作时,通常会出现问题(通常是配置问题或文件系统安全问题)。

    您可能想尝试启用内部 log4net 调试。将此密钥放在 app.config 的 &lt;appSettings&gt; 元素中:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
      </appSettings>
    </configuration>
    

    然后启动您的应用程序。 Log4net 会喷出一堆调试信息。它被写入 System.Console 和 System.Diagnostics.Trace 系统。您可以从附加的调试器或通过在 app.config 文件中添加跟踪侦听器来捕获跟踪消息。如果跟踪侦听器写入文件,请确保您的进程具有写入权限,否则您将什么也看不到:

    <configuration>
    ...
      <system.diagnostics>
        <trace autoflush="true">
          <listeners>
            <add
              name="textWriterTraceListener" 
              type="System.Diagnostics.TextWriterTraceListener" 
              initializeData="C:\tmp\log4net.txt"
              />
          </listeners>
        </trace>
      </system.diagnostics>
    ...
    </configuration>
    

    你可以在这里连接一个number of different trace listeners,包括那些写入Windows事件系统的。

    更多:

    【讨论】:

    • 非常感谢这个答案,它对我帮助很大。我为 maximumFileSize 指定了 100K 而不是 100KB,而 log4net 静默失败并且没有正确滚动我的日志(您必须使用 KB 而不是 K,否则它将拒绝该参数)。您上面的跟踪提示帮助我调试了这个。再次感谢,真的很有帮助!
    【解决方案2】:

    没有来源,很难说。应用程序是否也停止工作?如果是,请找出您的应用程序中的致命缺陷。

    如果不是,从 log4net JIRA 来看,RollingFileAppender 存在很多问题(参见:log4net JIRA):

    "RollingFileAppender stops logging intermittently when it tries to roll over the log file"

    "RollingFileAppender with rollingStyle="Date" and maximumFileSize both are not working Simultaneously."

    也许这是伤害你的那些问题之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      相关资源
      最近更新 更多