Log4Net RollingFileAppender с композитным стилем прокатки перезаписывает данные - PullRequest
9 голосов
/ 09 апреля 2009

У меня есть 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 , поэтому имеет смысл, что он будет катиться, когда достигнет определенного размера (по умолчанию 10 МБ), а не только в день.

Проблема в том, что когда он достигает размера, он перезапускает журнал, и я теряю данные с первой половины дня (он достигает этого размера около полудня).
Почему бы просто не перейти к новому файлу, и все будущие строки журнала будут помещены в MyLog.log? Или это журнал катится, но затем в полночь он снова катится и перезаписывает устаревший журнал (например, катится к MyLog.log2009-04-08, как только он достигает 10 МБ, а затем переписывает этот же файл в полночь)?

Я установлю

<rollingStyle value="Date" />

Это все, что я должен сделать, чтобы убедиться, что он катится только по границе Даты? Могу ли я изменить это на лету в Log4Net.config, или мне нужно перезапустить приложение? Он работает на IIS6.

Ответы [ 2 ]

11 голосов
/ 09 апреля 2009

Вот мои настройки. Это катит только на дату:

<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, перезапуск приложения автоматически (так что вы потеряете сессии и т. Д.).

8 голосов
/ 10 апреля 2009

Попробуйте добавить параметр 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>
...