log4net保留几天内的日志


想实现保留7天(一周)内的日志,网上一堆下述代码

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <!--日志路径-->
    <param name="File" type="log4net.Util.PatternString" value="%Log\%date{yyyMMdd}.log" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留天数-->!!! 此注释是错的
    <param name="MaxSizeRollBackups" value="10" />
    <!--日志文件名是否是固定不变的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式为:2019-11-14.log-->
    <param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
    <!--日志根据日期滚动-->
    <param name="RollingStyle" value="Date" />
    <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
    </layout>
</appender>

 

上面注释 <!--log保留天数--> 错得离谱,非常坑人。我参考这种说法,测试了半天都无效,也修改上面几个参数的值测试也没效。MaxSizeRollBackups是和文件大小配合使用的,比如设置2M,超过2M的日志就会切片备份,最多存在10个备份。

 

后来搜索到本文参考1中的问题,才明白在参考3官网说明里,早已经很明确的提示了

Caution note Caution

A maximum number of backup files when rolling on date/time boundaries is not supported.

根本就没有这种配置!!不支持在日期/时间滚动时设置备份文件的最大数量。

 

参考1中的回答还是有几个靠谱的方案,比如自己实现,写一个函数检查日志超过了10天就删除。比如设置 datePattern value="_dd'.log'" 这样每个月都会自动覆盖。

我目前按照 <param name= "DatePattern" value= "dddd&quot;log.txt&quot;"/> 表示星期几来配置的,这种方法同一天之内是往文件里追加,不同的天,同一个星期几会覆盖再追加

 

 

 

参考

1、相同问题:https://stackoverflow.com/questions/95286/log4net-set-max-backup-files-on-rollingfileappender-with-rolling-date/

2、官网例子:http://logging.apache.org/log4net/release/config-examples.html

3、官网说明:http://logging.apache.org/log4net/release/sdk/html/T_log4net_Appender_RollingFileAppender.htm


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM