マルチスレッド方式で複数のファイルを処理するアプリケーションに取り組んでいます。分析は、分析する必要のあるファイルごとに1つのスレッドを開始し、一連のステップ(さまざまなクラス)を実行して、すべて何らかの形式のログ出力を生成することによって行われます。
分析するファイルごとに、そのファイルのメッセージのみを含む専用のログファイルが必要です。私が今使用しているコードは、プログラムがまだシングルスレッドであるときに書かれました。
PatternLayout layout = new PatternLayout("%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %C{1} %x - %m%n");
if(Config.CREATE_SEPERATE_LOG)
{
FileAppender appender;
try {
String path = (Config.LOGFILE_PATH!=null)?Config.LOGFILE_PATH:filename;
appender = new FileAppender(layout,path);
appender.setErrorHandler(new FallbackErrorHandler());
appender.setName("Dedicated Appender");
org.apache.log4j.Logger.getRootLogger().addAppender(appender);
} catch (IOException e) {
org.apache.log4j.Logger.getLogger(Config.class).warn("Failed to create a dedicated log "+filename, e);
}
}
これにより、基本的に、分析中のファイル専用のログファイルに書き込む追加のアペンダーが作成されます。アプリケーションがシングルスレッドだった当時は機能していましたが、混乱していました。
設定を変更して、各クラスが特定のファイルの分析に参加し、そのファイルの特定のログファイルにログを記録できるようにするにはどうすればよいですか。