全体的な Quartz ベースのスケジューラと CronTriggers を使用して実行される「CycledJob」で構成されるアプリケーションに取り組んでいます。アプリケーションの目的は、送信元の国に基づいて、さまざまな電子メールの受信トレイからの入力を処理することです。
送信元の国 (米国、英国、フランスなど) に基づいて、アプリケーションは 1 つのジョブ スレッドをトリガーして各国の処理サイクルを実行します。そのため、英国のワーカー スレッド、米国、フランスなどに 1 つのスレッドが存在します。出力を log4j にフォーマットするとき、スレッド パラメーターを使用しているため、[ApplicationName_Worker-1]、[ApplicationName_Worker-2] などを発行します。 Quartz のスレッドプールから引き出されました。Quartz を拡張することもできますが、標準ライブラリをいじるのではなく、別の解決策を考えたいと思います。
問題は次のとおりです。log4j を使用する場合、米国のスレッドのすべてのログ項目を米国のみのファイルに出力したいと考えています。同様に、各国のスレッドについても同様です。それらが 1 つの統合された ConsoleAppender にとどまっているかどうかは気にしません。FileAppender の分割は、私がここで求めているものです。複数のファイルアペンダーなどを指定する方法はすでに知っていますが、国によって区別できないという問題があります。アプリケーション内には実行チェーン上に存在する可能性のある 20 以上のクラスがありますが、すべてのメソッドを介して追加の「コンテキスト」パラメーターを渡すという知識を負担にしたいクラスはほとんどありません... log4j ラッパー クラスを使用していますが、ロガー呼び出しをパラメーター化するスレッドをチェーン内のすべてのクラスに知らせることができない限り、それは不可能に思えます。
では、ここで質問があります。アプリケーション内のさまざまなスレッドごとに入力を処理するために使用される多くの下位クラスが、ログを記録しているときに特定の国のスレッドのコンテキスト内にあることを認識できるようにするための推奨されるアプローチは何でしょうか?
よく理解してください。明確な質問をしてください。誰かがこれに取り組むための適切な方法を見つけるのを手伝ってくれることを願っています. すべての提案を歓迎します。