想實現保留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".log"" /> <!--日志根據日期滾動--> <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官網說明里,早已經很明確的提示了
![]() |
---|
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"log.txt""/> 表示星期幾來配置的,這種方法同一天之內是往文件里追加,不同的天,同一個星期幾會覆蓋再追加
參考
2、官網例子:http://logging.apache.org/log4net/release/config-examples.html
3、官網說明:http://logging.apache.org/log4net/release/sdk/html/T_log4net_Appender_RollingFileAppender.htm