Log4j的擴展RollingFileAppender、DailyRollingFileAppender


最常用的Appender——RollingFileAppender

RollingFileAppender的一個Log4j配置樣例:

log4j.appender.R=org.apache.log4j.RollingFileAppender  
log4j.appender.R.Threshold=DEBUG  
log4j.appender.R.File=test.log  
log4j.appender.R.layout=org.apache.log4j.PatternLayout  
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n
log4j.appender.R.MaxFileSize=20MB
log4j.appender.R.MaxBackupIndex=10

RollingFileAppender使用MaxFileSize設置一個日志文件的最大大小,當產生多個日志時,會在日志名稱后面加上".1"、".2"、……這樣的后綴,我們可以看到RollingFileAppender有個屬性MaxBackupIndex,這個屬性通過限制日志文件名后綴".n"中的n大小來限制日志數量,比如上面MaxBackupIndex=10,其實最大日志數量為11。我們知道這個有這個限制是很必要的,當我們的程序在服務器上運行時,隨着時間的遷移,日志會越來越多,如果對日志數量沒有限制,日志大小會越來越大,最后甚至占滿整個硬盤。


可以按照周期時間來滾動日志文件的Appender——DailyRollingFileAppender

DailyRollingFileAppender的一個Log4j配置樣例:

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=test.log
log4j.appender.logfile.DataPattern='.'yyyy-MM-dd-HH-mm
log4j.appender.logfile.Threshold=debug
log4j.appender.logfile.encoding=UTF-8
#是否追加內容
log4j.appender.logfile.Append=true
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern= [%d{yyyy-MM-dd HH\:mm\:ss}]%-5p %c(line\:%L) %x-%m%n


DailyRollingFileAppender特點是固定周期時間生成一個日志文件,比如,默認情況是每天生成一個文件。這種日志可以方便根據時間來定位日志位置,使日志清晰易查。但是這種日志有個不好地方是,不能限制日志數量,MaxBackupIndex屬性和MaxFileSize在DailyRollingFileAppender中是無效的,我們上面已經提到限制日志數量的必要性。這里有兩個解決辦法:

  • linux上crontab+shell
  • java進程里面起一個線程,定期掃描日志文件夾。

java中可以重寫DailyRollingFileAppender,詳情見https://www.cnblogs.com/rembau/p/5201001.html

在DailyRollingFileAppender中可以指定monthly(每月)、 weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小時)和minutely(每分鍾)六個頻度,這是通過為 DatePattern選項賦予不同的值來完成的。DatePattern選項的有效值為:

  • '.'yyyy-MM,對應monthly(每月)
  • '.'yyyy-ww,對應weekly(每周)
  • '.'yyyy-MM-dd,對應daily(每天)
  • '.'yyyy-MM-dd-a,對應half-daily(每半天)
  • '.'yyyy-MM-dd-HH,對應hourly(每小時)
  • '.'yyyy-MM-dd-HH-mm,對應minutely(每分鍾)

DatePattern中不用處理的文字要放到單引號(')中,如上面的(.)。如果您對此有疑問可以查閱SimpleDateFormat的文檔。DailyRollingFileAppender中使用這個類來處理DatePattern。

DatePattern格式化之后的文本作為文件名字的后綴。DailyRollingFileAppender不支持格式化之后的文本作為文件名字的前綴。

DailyRollingFileAppender在每一個日志事件(LoggingEvent)附加(append)之前檢查是否需要附加。也就是說如果在一個滾動區間中沒有任何日志記錄,那么這個區間的日志記錄文件就不會形成。

詳情見 https://www.cnblogs.com/jtlgb/p/8342862.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM