代码之家  ›  专栏  ›  技术社区  ›  Tai Squared

具有复合滚动样式的log4net rollingfileappender正在重写数据

  •  9
  • Tai Squared  · 技术社区  · 16 年前

    我有一个log4net rollingfileappender,配置为:

    <configuration>
    
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections>
    
      <log4net>
    
        <root>
          <level value="ALL" />
        </root>
    
        <logger name="RollingFileAppender" additivity="false">
          <level value="DEBUG"/>
          <appender-ref ref="RollingFileAppender" />
        </logger>
    
        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
          <param name="File" value="C:\\MyLog.log" />
          <param name="AppendToFile" value="true" />
          <param name="DatePattern" value="yyyy-MM-dd"/>
          <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%m%n"/>
          </layout>
        </appender>
    
      </log4net>
    
    </configuration>
    

    看着 documentation , the 默认的滚动样式是复合的 因此,当它达到某个大小(默认为10MB)时,这是有意义的,而不仅仅是在日期。

    问题是,当它达到大小时,它正在重新启动日志,我将丢失前半天的数据(大约在中午达到这个大小)。
    为什么不滚到一个新文件,所有未来的日志行都放在mylog.log中? 或者是日志正在滚动,但是在午夜,它再次滚动并覆盖日期日志(例如,一旦达到10MB,滚动到mylog.log2009-04-08,然后在午夜覆盖此文件)?

    我会设置

    <rollingStyle value="Date" />
    

    我要做的就是确保它只在日期边界滚动吗?我可以在log4net.config中即时更改这个,还是必须重新启动应用程序?它在II6上运行。

    2 回复  |  直到 12 年前
        1
  •  10
  •   Philipp M    12 年前

    这是我的设置。仅在以下日期滚动:

    <log4net>
        <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
            <file value="c:\Logs\Today.log"/>
            <rollingStyle value="Date"/>
            <datePattern value="yyyyMMdd"/>
            <appendToFile value="true"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level %logger %date{ISO8601} - %message%newline"/>
            </layout>
        </appender>
        <root>
            <!-- Options are "ALL", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "OFF". -->
            <level value="ERROR"/>
            <appender-ref ref="RollingFile"/>
        </root>
    </log4net>
    

    对web.config的更改将自动重新启动应用程序(这样您将丢失会话等)。

        2
  •  8
  •   Philipp M    12 年前

    尝试添加 maxSizeRollBackups 您的 RollingFileAppender 解决我们一半的问题。这样,当日志文件滚动时,它不会覆盖旧日志,而是将其滚动到另一个文件。

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <param name="File" value="C:\\MyLog.log" />
      <param name="AppendToFile" value="true" />
      <param name="DatePattern" value="yyyy-MM-dd"/>
      <param name="maxSizeRollBackups" value="10" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%m%n"/>
      </layout>
    </appender>