0

使用しているサービスに応じて、別のログ ファイルに記録する必要があります。たとえば、service1 と service2 があり、ログがそれぞれ service1.log と service2.log にあるとします。

問題は、両方のサービスから共通のコードが使用されていることです。共通コードがいずれかのサービスによって呼び出された場合に、その特定のログ ファイルにログインするようにログを作成するにはどうすればよいでしょうか。

私がロガーを作成する方法は

private static final Logger logger = Logger.getLogger(ClassName.class);

これを処理するために私が考えている方法は、文字列 (ロガー名) を共通コードに渡し、クラスではなくメソッド レベルでロガーを作成することです。

例:

someMethodInCommonCode(String loggerName) {
  Logger logger = Logger.getLogger(loggerName);
}

log4j がロガーのキャッシュを保持していることを読んだので、メソッドでロガーを作成してもオーバーヘッドにはならないと思います。

はい、ロガー名が渡されるのは好きではありません。上記のシナリオやその他のアイデアを実現する方法や構成はありますか。

4

2 に答える 2

3

log4jのネスト/マップされた診断コンテキスト(NDCまたはMDC)機能を使用できます。基本的に、これらは「帯域外」情報であり、スレッドごとに保存され、ログ操作が実行されるとログイベントに自動的に添付されます。NDCの情報は、ログファイルに出力したり、アペンダー間でログメッセージをルーティングしたりするために使用できます。これがまさに必要なことです。これらの詳細については、log4jの公式wikiを参照してください。

共通コードを呼び出す前に、サービス名またはその他の識別子をサービスのNDCに保存できます。次に、log4jフィルターを構成して、NDCで見つかったサービス名に従って共通ログメッセージを適切な出力ファイルにルーティングできます。共通コードを変更する必要はありません。

于 2012-06-04T01:24:49.577 に答える
0

サービスが異なるスレッドで実行されている場合は、現在のスレッドを確認し、それに応じてロガーを選択できます

于 2012-06-03T20:57:10.657 に答える