本範例的log4j為1.2.17,若看不太懂要先去看之前的範例。
順序為 環境設定, log的檔案輸出, log4j.xml, RollingFileAppender
-------------
緊接著 FileAppender及 RollingFileAppender之後,再來要介紹的是
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/
原文出處:log4j教學筆記(八)DailyRollingFileAppender @ 菲比傻大姐&肉豬 :: 痞客邦 PIXNET ::