3.5. org.apache.log4j.RollingFileAppender クラス
RollingFileAppender は FileAppender クラスを拡張したクラスで、ログファイルが一定のサイズを超えたとき、バックアップファイルを作成したい場合に使用します。
1: RollingFileAppender() 2: RollingFileAppender(Layout layout,String filename) 3: RollingFileAppender(Layout layout,String filename,boolean append)
RollingFileAppender オブジェクトの生成方法は上記のコンストラクタを使用しますが、引き数は FileAppender クラスの場合と同じです。
setMaxFileSize( ) メソッド、setMaximumFileSize( ) メソッドを使用することで、ファイルのバックアップを作成するタイミングを指定することが出来ます。
setMaxFileSize( ) メソッドでは、引き数に String 型の文字列でバックアップを作成する際のファイルのバイトサイズを指定します。引き数はString型の整数を取ることが出来ますが、その後ろに「KB」、「MB」、「GB」をつけることにより、「キロバイト」、「メガバイト」、「ギガバイト」とすることが可能です。例えば、setMaxFileSize("1KB") とすると、ファイルサイズが1024バイトを超えるとバックアップファイルが作成されます。setMaximumFileSize( ) メソッドは、引き数に long 型の整数でバックアップを作成する際のファイルのバイトサイズを指定します。
バックアップファイルにインデックスをつけることが出来ます。setMaxBackupIndex( ) メソッドを使用して、最も古いファイルが消去される前に保持するバックアップファイルがいくつあるかを指定します。このメソッドを使用しない場合は、1 が設定されています。
ファイル名が sample.log というファイルにログを出力させるときに、setMaxBackupIndex( 3 ) とすると、sample.log.1、sample.log.2、sample.log.3というバックアップファイルが生成されます。次にバックアップが必要になるときには、今の sample.log.3 ファイルの内容は失われることになります。このメソッドの引き数に 0 を設定すると、バックアップファイルは生成されず、指定したファイルサイズを超えるとその部分は切り取られることになります。
設定ファイルを使用する場合は、次のように記述します。
1: # sampleLogger 2: log4j.logger.SampleLogger = WARN , A3 3: 4: # APPENDER A3 5: log4j.appender.A3 = org.apache.log4j.RollingFileAppender 6: log4j.appender.A3.File = sample.log # 出力先 7: log4j.appender.A3.MaxFileSize = 10MB # バックアップ作成時のファイルのサイズ 8: log4j.appender.A3.MaxBackupIndex = 3 # バックアップファイルインデックスの最大値
3.6. DailyRollingFileAppender クラス
DailyRollingFileAppender は FileAppender クラスを拡張したクラスで、日付や時間によりログファイルのバックアップを作成する場合に使用します。
DailyRollingFileAppender オブジェクトは次のコンストラクタを用いて生成します。
1: DailyRollingFileAppender() 2: DailyRollingFileAppender(Layout layout,String filename,String datePattern)
2つ目のコンストラクタは、一つ目と二つ目の引き数で、出力フォーマットと出力先のファイル名を指定します。三つ目の引き数で、どのタイミングでバックアップファイルを作成するかを指定します。これらはそれぞれ、setLayout( )、setFile( )、setDatePattern( ) メソッドで設定することも可能です。
ここで指定した日付パターンがログファイルの後ろに添えられることになるのですが、日付パターンで使用する文字列は、java.text.SimpleDateFormatクラスで決められたものを使用します。次表に使用できる文字列のうち、主なものを紹介します。
文字 | 意味 |
---|---|
y | 年 |
M | 月 |
d | 日 |
h | 午前/午後の時(1〜12) |
H | 一日における時(0〜23) |
m | 分 |
s | 秒 |
E | 曜日 |
D | 年における日 |
w | 年における週 |
W | 月における週 |
a | 午前/午後 |
タイミングは次の表のようになります。表中の logfile はログファイル名です。分単位のバックアップ作成が最小の単位になります。
日付パターン(例) | バックアップ作成のタイミング | バックアップファイル(例) |
---|---|---|
'.'yyyy-MM |
月が変わるとき。 |
logfile.2002-05 |
'.'yyyy-ww | 週が変わるとき。 | logfile.2002-18 |
'.'yyyy-MM-dd | 日付が変わるとき。 | logfile.2002-05-15 |
'.'yyyy-MM-dd-a | 各日の真夜中と正午。 | logfile.2002-05-15-午後 |
'.'yyyy-MM-dd-HH | 1時間ごと。 | logfile.2002-05-15-18 |
'.'yyyy-MM-dd-HH-mm | 1分ごと。 | logfile.2002-05-15-18-36 |
誤解が生じないように説明しておきますが、DailyRollingFileAppender は一つのプログラムが動作している間に指定した日付パターンの時刻(または日など)が切り替わるときにバックアップファイルが生成されます。ログファイルを生成するプログラムがいったん終了すると、次に同じプログラムを実行してもその時にあるログファイルのバックアップが生成されるわけではありません。
設定ファイルを使用する場合は、次のように記述します。
1: # sampleLogger 2: log4j.logger.sampleLogger = WARN,A4 3: 4: # APPENDER A4 5: log4j.appender.A4 = org.apache.log4j.DailyRollingFileAppender 6: log4j.appender.A4.File = sample.log # 出力先 7: log4j.appender.A4.DatePattern='.'yyyy-MM-dd # 日付パターン
(実習課題1)
1 秒置きに 0 〜 99 の乱数を発生させ、その値が 3 の倍数である場合と 5 の倍数である場合とで異なるファイルにログメッセージを書き込むプログラムを作成しなさい。
- 3 の倍数の場合は、一分おきにバックアップを作成すること。
- 5 の倍数の場合は、ファイルサイズが 1kB を超えるごとにバックアップを作成すること。
- 5 の倍数の場合のファイルのバックアップの最大インデックスは任意。
- ログを出力するときのイベントレベルは何でも良い。
- PropertyConfigurator を使用して、設定ファイルによりログ出力を制御すること。
- 出力フォーマットは PatternLayout で指定すること。指定方法は以下の通り。
# APPENDER が A の時、 log4j.appender.A.layout=org.apache.log4j.PatternLayout log4j.appender.A.layout.ConversionPattern=%d [%t] %-5p %c - %m%n