11

我有一个 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>

查看文档默认滚动样式是 Composite,所以当它达到一定大小(默认为 10MB)时,它会滚动,而不仅仅是日期。

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

我将设置

<rollingStyle value="Date" />

这是我必须做的所有事情来确保它只在日期边界上滚动吗?我可以在 Log4Net.config 中即时更改它,还是必须重新启动应用程序?它在 IIS6 上运行。

4

2 回答 2

13

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

<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 的更改将自动重新启动应用程序(因此您将丢失会话等)。

于 2009-04-09T16:44:52.643 回答
9

尝试添加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>
于 2009-04-10T04:37:01.107 回答