Log4Net RollingFileAppender с составным стилем прокрутки перезаписывает данные
-
09-09-2019 - |
Вопрос
У меня есть 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>
Глядя на документация, Стиль прокрутки по умолчанию — «Композитный»., поэтому имеет смысл, что это произойдет, когда оно достигнет определенного размера (по умолчанию 10 МБ), а не только в день.
Проблема в том, что когда он достигает размера, журнал перезапускается, и я теряю данные за первую половину дня (он достигает этого размера около полудня).
Почему бы просто не перенести это в новый файл, и все будущие строки журнала не будут помещены в MyLog.log?Или журнал переворачивается, но затем в полночь он перезаписывается снова и перезаписывает датированный журнал (например.перейти к MyLog.log2009-04-08, как только он достигнет 10 МБ, а затем перезаписать этот же файл в полночь)?
я установлю
<rollingStyle value="Date" />
Это все, что мне нужно сделать, чтобы гарантировать, что он перемещается только по границе даты?Могу ли я изменить это на лету в Log4Net.config или мне придется перезапустить приложение?Он работает на IIS6.
Решение
Вот мои настройки.Он катится только по дате:
<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 автоматически перезапустят приложение (поэтому вы потеряете сеансы и т. д.).
Другие советы
Попробуйте добавить 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>