1

次のようにインスタンス化する log4j ロガーがあります。

logger = Logger.getLogger("EQUIP(" + id + ")");

そうすることで、 を呼び出すとlogger.info("message")、次のような出力が得られるはずです (日付の書式設定がいくつかあります)。

13/11/12 15:08:27 INFO: EQUIP(1): message

しかし、私は得ているだけです:

13/11/12 15:08:27 INFO: message

デバッグのためにコンソールにもlogger.getName()出力していますが、正しい「EQUIP(1)」という名前が返されます。この動作は、このようなロガーがいくつかある私のプログラムで発生する場合がありますが、ほとんどはこの特定のクラスで発生します。私が何か間違ったことをしているのか、この名前がクラス/パッケージ名だけであるべきなのか、それとも何でもよいのか (私のロガーの 80% 以上でうまく動作します) を知りたいです。複数の機器が同時に動作しているため、各機器の ID を印刷する必要があり、これなしでそれらを追跡することはほぼ不可能です。

できればすべてのログ呼び出しを変更してこのプレフィックスを含めるようにリソースを調達せずに、どうすればこれを修正できますか?

4

1 に答える 1

3

出力形式は、アペンダー用に構成したパターンによって異なります。パターン文字列に含まれている場合%cはロガー名が含まれますが、含まれていない場合は含まれません。

別のアプローチとして、マップされた診断コンテキストを使用することもできます。これは、同じロガーに書き込むさまざまなスレッドからのログ出力を明確にするように設計されています。

于 2012-11-13T17:21:14.517 に答える