基於Log4j完成定時建立和刪除日誌的方法

文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/java

1.背景

Log4j做爲經常使用的日誌生成工具,其清除日誌的策略卻十分有限。只有在RollingFileAppender中能夠經過設置MaxFileSize和maxBackupIndex屬性來指定要保留的日誌文件大小以及個數,從而實現自動清除。apache

 

可是實際生產中,咱們的真實的需求經常是定時生成日誌,而後保留最近幾天的日誌,歷史日誌須要及時清理。但是Log4j中的DailyRollingFileAppender這個類卻不帶屬性maxBackupIndex,maxFileSize等,因此沒法經過直接配置實現。微信

針對這種狀況,通常方法是寫一個定時刪除日誌的腳本等,這裏咱們討論一種經過繼承FileAppender,從新實現DailyRollingFileAppender類,而且帶有按時間順序清理日誌的功能。app

2.具體實現

2.1代碼實現

a.完成自定義的日期類和文件過濾類,爲進行文件命名和查找作準備。函數

 

b.繼承FileAppender類,定義好文件輸出日期格式以及文件備份參數。工具

 

c.重寫核心的RollOver函數。佈局

 

d.在RollOver函數中完成對備份數量的監測以及歷史日誌的刪除。spa

2.2配置實現

 

3.Log4j各配置的含義

Log4j由三個重要的組件構成:日誌信息的優先級,日誌信息的輸出目的地,日誌信息的輸出格式。日誌信息的優先級從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌信息的重要程度;日誌信息的輸出目的地指定了日誌將打印到控制檯仍是文件中;而輸出格式則控制了日誌信息的顯示內容。Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是Java特性文件(鍵=值)。這裏,咱們主要探討基於XML的配置方式。線程

3.1配置根logger

基本語法是: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

3.2配置日誌信息輸出目的地Appeder

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,它們的屬性也有必定的差異,這些屬性主要是針對日誌文件的命名規則、保存路徑、刪除策略等有關係。

3.2.1 ConsoleAppender的屬性

Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。

ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。

Target=System.err:默認值是System.out。

3.2.2 FileAppender的屬性

Threshold=WARN:指定日誌信息的最低輸出級別,默認爲DEBUG。

ImmediateFlush=true:表示全部消息都會被當即輸出,設爲false則不輸出,默認值是true。

Append=false:true表示消息增長到指定文件中,false則將消息覆蓋指定的文件內容,默認值是true。

File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件中。

3.2.3 DailyRollingFileAppender的屬性

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:每分鐘

3.2.4 RollingFileAppender的屬性

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文件。

3.3 配置日誌信息的格式(佈局)layout

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/

                                                                                    若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                                                                                                            

相關文章
相關標籤/搜索