2017-10-05 95 views
0

我有一个循环过100,000+项的过程,并且在关于它们的日志中进行了大量的写操作,而且由于log4net不工作,我在保留所有需要的日志时遇到了问题我如何期待它。log4net没有保留正确的备份文件数

我的配置是这样的:

<appender name="debug" type="log4net.Appender.RollingFileAppender"> 
    <file value="logs\" /> 
    <datePattern value="yyyyMMdd'_DEBUG.log'" /> 
    <staticLogFileName value="false" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Composite" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline[%date]-%level-%logger[%M]- Linea:%L - %message%newline"/> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <param name="LevelMin" value="debug"/> 
     <param name="LevelMax" value="debug"/> 
    </filter> 
    </appender> 

使用这个配置,我预计,一旦第一个文件已满,第二个文件被创建,然后是第三等,最多的每天10个。我认为覆盖任何以前的日志的唯一方法是拥有10个完整文件,并且下一个条目将不得不从第一个文件重写现有文件。但是,发生的情况是,我在第一个文件已满(并转换为第一个备份)后创建了一个文件,但是在第二个文件已满后,而不是将其转换为另一个备份并转到第三个文件,它开始覆盖原始文件。

所以我最终

20171005_DEBUG.log

20171005_DEBUG.log.1

,没有别的,与20171005_DEBUG.log被覆盖掉了一个。

我可以通过将最大文件大小更改为100MB或任何真正巨大的数据来“解决”这个问题,但我宁愿知道我在这里做错了什么。任何人?

回答

2

更改您的

<rollingStyle value="Composite" /> 

要么

<rollingStyle value="Date" /> 

<rollingStyle value="Size" /> 

应该给你所期望的行为。

Composite同时考虑日期和大小。

RollingFileAppender.RollingModes


既然你说处理100.000+行日志,你有没有考虑记录到数据库呢?

+0

“既然你说过处理100.000+行日志,你有没有考虑登录到数据库呢?”为什么? – Antrim

+2

那么如果你只是为了保留日志而保留日志,那么查询数据库查看日志事件比解析日志文件更方便。 – Filburt

相关问题