本範例的log4j為1.2.17,若看不太懂要先去看之前的範例。

順序為環境設定log的檔案輸出log4j.xmlRollingFileAppender

 

-------------

緊接著FileAppenderRollingFileAppender之後,再來要介紹的是DailyRollingFileAppender

從DailyRollingFileAppender的名稱就知道和時間日期有關。

DailyRollingFileAppender可以依照需求來設定log輸出檔案的時間週期,例如每個月,每個小時,每天或每分鐘等。

log4j.xml的設定類似RollingFileAppender。

 

本範例的專案目錄結構如下,同RollingFileAppender。

MainTest.java用來執行程式,log4j.xml為設定log輸出的位置其樣式等。

 

我把MainTest.java中的log訊息改得簡單一點 ...

...

 

log4j.xml ...

...

說明

參數encoding用來設定log訊息輸出的編碼,這邊用的是UTF-8 (line 8)

DatePattern是DailyRollingFileAppender的一個重要參數,用來設定檔案輸出的週期,本範例設定為每分鐘輸出新的log檔案 (line 10)。 

DatePattern的週期

注意DatePattern的值中不可使用冒號":"。至於不需處理的文字要放在單引號"'"內。

DailyRollingAppender只能將日期格式放在檔案名稱後,無法放在檔案名稱前(這點真爛)

 

此範例將layout設為PatternLayout,因此要在其內給定ConversionPattern的格式(format),也就是log輸出的格式(line 11 ~ line 13)

 

log4j.xml設定完後就可以執行MainTest.java來看看結果,執行完後會在專案目錄下多個"log.out"的log檔。(log檔的輸出位置請參考前範例)

 

和之前範例一樣,將"log.out"檔案名稱改為"log.out.txt"來用記事本開啟

 

DailyRollingFileAppender的第一個log檔並不會加上DatePattern的樣式,必須在下一次週期產生的log檔才會加上DatePattern的樣式。

本範例設定的週期為每分鐘輸出一個新的log檔,所以在第一次執行完隔一分鐘後再執行一次,就會多一個新的log.out加上DatePattern設定的日期格式。

記得執行前必須先將剛修改的"log.out.txt"改回"log.out",否則又會重新輸出一個"log.out"檔案。

 

把兩個檔案名稱後加上".txt"用記事本開啟,會發現最後輸出的log訊息會在"log.out"內,而第一次輸出的log訊息會在有DatePattern的log.out檔案中(範例中的"log.out.2015-10-29-11-02")。

而且仔細看,DatePattern的時間不是最後執行的時間,而是第一次執行的時間,因此結論是最新的log訊息會輸出在沒有DatePattern的那個log檔,而舊的訊息會放在有當初執行時間的log檔
(如果你覺得這段敘述讓你看得昏昏欲睡的話,直接執行程式來觀察會比較清楚:p)

 

和RollingFileAppender比較起來,DailyRollingFileAppender好用多了 :-)。

 

文章參考於

亲亲宝宝(中華人民共和國人民的博客)

wiki.apache.org/logging-log4j/

 

 

文章標籤
創作者介紹

菲比傻大姐&肉豬

phoebelin0606 發表在 痞客邦 PIXNET 留言(0) 人氣()