ユーザーの指定によって出力先を変えたりするとき。
とりあえず、ファイルを閉じれないとファイルの書き込みが完了しなかったり、ファイルをにぎりっぱなしになったりするので、closeFileを呼び出してファイル閉じたいのだけど、protectedなので、継承してpublicにする。
public class ClosableFileAppender extends FileAppender{ @Override public void closeFile() { super.closeFile(); } @Override public void activateOptions() { } }
このAppenderをプロパティファイルで指定しつつ操作するためには、確実に取得できるloggerを用意しておく。
log4j.logger.myapplog = INFO, file #本来の出力指定 log4j.logger.fileholder = FATAL, file #ファイルを保持しておくため log4j.appender.file=ClosableFileAppender # appenderの設定 log4j.appender.file.layout=org.apache.log4j.SimpleLayout
あとは、出力時にこんなことを書いておく
ClosableFileAppender cfa = null; Appender appender = Log.fileholder.getAppender("file"); if(appender instanceof ClosableFileAppender){ cfa = ((ClosableFileAppender)appender); cfa.closeFile(); cfa.setFile("C:\user\kishida\data\log.txt", false, true, 1024); } // ログ出力のある処理を行う cfa.closeFile();
けど、こんなことが必要になる状況って普通はなさげだな〜