文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/java
Log4j做爲經常使用的日誌生成工具,其清除日誌的策略卻十分有限。只有在RollingFileAppender中能夠經過設置MaxFileSize和maxBackupIndex屬性來指定要保留的日誌文件大小以及個數,從而實現自動清除。apache
可是實際生產中,咱們的真實的需求經常是定時生成日誌,而後保留最近幾天的日誌,歷史日誌須要及時清理。但是Log4j中的DailyRollingFileAppender這個類卻不帶屬性maxBackupIndex,maxFileSize等,因此沒法經過直接配置實現。微信
針對這種狀況,通常方法是寫一個定時刪除日誌的腳本等,這裏咱們討論一種經過繼承FileAppender,從新實現DailyRollingFileAppender類,而且帶有按時間順序清理日誌的功能。app
a.完成自定義的日期類和文件過濾類,爲進行文件命名和查找作準備。函數
b.繼承FileAppender類,定義好文件輸出日期格式以及文件備份參數。工具
c.重寫核心的RollOver函數。佈局
d.在RollOver函數中完成對備份數量的監測以及歷史日誌的刪除。spa
Log4j由三個重要的組件構成:日誌信息的優先級,日誌信息的輸出目的地,日誌信息的輸出格式。日誌信息的優先級從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌信息的重要程度;日誌信息的輸出目的地指定了日誌將打印到控制檯仍是文件中;而輸出格式則控制了日誌信息的顯示內容。Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件(鍵=值)。這裏,咱們主要探討基於XML的配置方式。線程
基本語法是:3d
其中,level 是日誌記錄的優先級,分爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優 先級從高到低分別是ERROR、WARN、INFO、DEBUG。
這裏,每個appenderName均是下面須要配置的日誌信息的名稱。
實際例子:
log4j.rootLogger=INFO ,stdout, ROLLING_ERROR_FILE, ROLLING_INFO_FILE
Log4j中提供的Appender主要有如下幾種:
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件),
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
基本語法爲:
實際例子:
log4j.appender.ROLLING_ERROR_FILE=org.apache.log4j.DailyRollingFileAppender
針對不一樣的Appender,它們的屬性也有必定的差異,這些屬性主要是針對日誌文件的命名規則、保存路徑、刪除策略等有關係。
Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。
ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。
Target=System.err:默認值是System.out。
Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。
ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。
Append=false:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。
File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件中。
Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。
ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。
Append=false:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。
File=D:/logs/logging.log4j:指定當前消息輸出到logging.log4j文件中。
DatePattern='.'yyyy-MM:每個月滾動一第二天志文件,即每個月產生一個新的日誌文件。當前月的日誌文件名爲logging.log4j,前一個月的日誌文件名爲logging.log4j.yyyy-MM。
另外,也能夠指定按周、天、時、分等來滾動日誌文件,對應的格式以下:
1)'.'yyyy-MM:每個月
2)'.'yyyy-ww:每週
3)'.'yyyy-MM-dd:天天
4)'.'yyyy-MM-dd-a:天天兩次
5)'.'yyyy-MM-dd-HH:每小時
6)'.'yyyy-MM-dd-HH-mm:每分鐘
Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。
ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。
Append=false:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。
File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件中。
MaxFileSize=100KB:後綴能夠是KB, MB 或者GB。在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到logging.log4j.1文件中。
MaxBackupIndex=2:指定能夠產生的滾動文件的最大數,例如,設爲2則能夠產生logging.log4j.1,logging.log4j.2兩個滾動文件和一個logging.log4j文件。
Log4j提供的layout有如下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
Log4j採用相似C語言中的printf函數的打印格式格式化日誌信息,打印參數以下: %m 輸出代碼中指定的消息
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啓動到輸出該log信息耗費的毫秒數
%c 輸出所屬的類目,一般就是所在類的全名
%t 輸出產生該日誌事件的線程名
%n 輸出一個回車換行符,Windows平臺爲「rn」,Unix平臺爲「n」
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy MMM dd HH:mm:ss,SSS},輸出相似:2002年10月18日 22:10:28,921
%l 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
基本語法爲:
實際例子:
log4j.appender.ROLLING_ERROR_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_ERROR_FILE.layout.ConversionPattern=[log] %d -%-4r [%t] %c %x%n %-5p - %m [%l] %n
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^