ユニークなIDを持つさまざまなスレッドを起動するJAVAクラスがあります。 各スレッドは、ID.logの名前に基づいて一意のログファイルにログインする必要があります。複数のスレッドを異なるログファイルに記録する方法は?
私は、実行時にのみ一意のIDを取得するので、私はプログラム的にLog4Jを設定する必要があります。私は順次ジョブを開始した場合
// Get the jobID
myJobID = aJobID;
// Initialize the logger
myLogger = Logger.getLogger(myJobID);
FileAppender myFileAppender;
try
{
myFileAppender = new FileAppender(new SimpleLayout(), myJobID + ".log", false);
BasicConfigurator.resetConfiguration();
BasicConfigurator.configure(myFileAppender);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
は今、これは正常に動作します - しかし、私は(同じクラスの)2つのスレッドを起動したとき同時に両方のログが作成されますが、ログは混在します。第2のスレッドは、第1のログと第2のログにログインします。
各インスタンスが一意であることを確認するにはどうすればよいですか? 各ロガーインスタンスに一意の名前を付けようとしましたが、何も変更されませんでした。
Javaコードでこの区別を行う理由はありますか?一般的なプラクティスは、1つのファイルにログインしてから、いくつかの後処理を実行して抽出/集約することです。また、http://logging.apache.org/log4j/1.2/faq.html#a3.1 – havexz
を参照してください。[各スレッドが独自のログファイルに出力するようにlog4jプロパティを設定するにはどうすればいいですか?](http: /stackoverflow.com/q/1172113/127035) – sudocode