特定のメソッド呼び出し MyMethod() のアペンダーを作成して有効にしたいと考えています。このメソッドのログ出力は、"logFilePath" に存在するファイルに送られるはずです。
このアペンダーをxml構成ファイルに含めたくないので、実行時に作成することを考えました。
まず、実行時にロガーのプロパティを変更してから、 activateOptions を呼び出してみました。前にレベルを DEBUG に設定し、finally ブロックでオフに設定して、メソッドが使用されている間だけ出力がログに記録されるようにします。それはうまくいきませんでした。
ここでの問題は、アペンダーが毎回ファイルを再作成し、同じファイルに追加しないことです。これは、setAppend が true であるにもかかわらずです。
私は log4j にあまり詳しくないので、別のアプローチを提案してください。以下は、私がしようとしていることを説明するためのサンプルコードです。
private static FileAppender createNewAppender(String logFilePath) {
FileAppender appender = new FileAppender();
appender.setName("MyFileAppender");
appender.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
appender.setFile(logFilePath);
appender.setAppend(true);
appender.setThreshold(Level.INFO);
appender.activateOptions();
Logger.getRootLogger().addAppender(appender);
return appender;
}
private static void removeAppender() {
Logger.getRootLogger().removeAppender(fileAppender) ; // ("MyFileAppender");
}
上記のメソッドを次の方法で呼び出します。
private static FileAppender fileAppender = null;
private static void myMethod(String logFilePath) {
try {
fileAppender = createNewAppender();
someOperation();
}
finally {
removeAppender();
fileAppender=null;
}
}