logbackで日次ログローテーションする

logbackで日次ローテーションをする時のサンプル。

<configuration>

   <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <file>logFile.log</file>
   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
     <!-- daily rollover -->
     <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>

     <!-- keep 30 days worth of history -->
     <maxHistory>30</maxHistory> 
   </rollingPolicy>

   <encoder>
     <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
   </encoder>
 </appender> 

 <root level="DEBUG">
   <appender-ref ref="FILE" />
 </root>
</configuration>

実はlogbackダウンロードした中に入っている。
logback-0.9.29/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingTimeBased.xml
他にもサイズローテなどのサンプルが入っているので開いてみると幸せになれる。

いくつか設定方法を紹介。(公式にも掲載されている)

logFile.%d{yyyy-MM-dd}.log
%d{}のフォーマットを書き換えることで、ローテーションタイミングが決まる。
フォーマットはjava.text.SimpleDateFormat参照。

  • 日次ローテ

logFile.%d.log
%dは"2006-11-24"形式。

  • 月次ローテ

logFile.%d{yyyy-MM}.log
例えば、"%d{yyyy/MM}/logFile.log"とすると、月次ディレクトリが作られる。
# 2011/08/logFile.log

  • 週次ローテ

logFile.%d{yyyy-ww}.log
localeに依存する。

  • 毎時ローテ

logFile.%d{yyyy-MM-dd_HH}.log

  • 毎分ローテ!

logFile.%d{yyyy-MM-dd_HH-mm}.log

また、ログファイルをアーカイブする際にzipさせることも可能。
※ただし注意事項があるようなので公式説明をよく読まれたし。

  • GZIPで圧縮する

logFile.%d.gz
ファイル名の最後に ".gz" もしくは ".zip"をつけるだけ。