0

私のプログラムでは、ロギングイベントの2つの別々のストリームがあります(簡単にするためにストリームと呼びますが、実際には2つのアペンダーと呼んでいます)。Stream1 にはクライアント ログが含まれ、Stream2 には制御ログが含まれます。これは簡単に思えるかもしれませんが、状況に応じて、特定のクラスがクライアント ロギングとサーバー ロギングの両方に含まれる場合があります。これをさらに複雑にしているのは、クライアントが必要とするコマンドが 2 つの別個のスレッド (スレッド プールからランダムにフェッチされるスレッド) で実行されるため、MDC または NDC を使用したあらゆる種類の追跡が不可能になることです。

これを本当に単純化するのは、ロガーが呼び出し元のインスタンスからアペンダーを継承できる場合です。そうすれば、2 つのロガーに対して 2 つのアペンダーをセットアップして完了できます。しかし、それをきれいに、または簡単に行う方法がわかりません。誰かがそうする方法について何かアドバイスを提供できますか?

注: 何かを渡す必要がある場合、必要に応じて使用できるチェーン内のすべてに渡されるイベント Bean があります。

4

1 に答える 1

1

クライアントの処理は複数のスレッドで行われることはすでに説明したので、単純なThreadLocalアプローチでは機能しない可能性があります...しかし、ThreadGroupLocal機能するでしょうか?

[ Javaにスレッドグループローカル変数はありますか? ]を参照してください。

私が提案しているタクトは、ロギングフレームワークに登録されているアペンダーを1つだけにすることです。そのアペンダーはあなたが書くものになるでしょう。実装はThreadLocal/ThreadGroupLocalアペンダーに委任します。そのアペンダーは、クライアントまたはコントロールに固有です

また、アペンダーは非同期またはバッチの抽象化の下で構成しないでください。

于 2010-05-16T23:37:54.663 に答える