3

Web アプリケーション用に log4j を使用してカスタム ログ ファイルを実装しました。しかし、問題は、そのログ ファイルに何かを印刷しているときに、複数回印刷されることです。コードにループや反復がないかどうか。誰でもこの問題を解決するのを手伝ってくれませんか。

4

4 に答える 4

10

出典: http://www.jajakarta.org/log4j/jakarta-log4j-1.1.3/docs/TROUBLESHOOT.html

log4j 出力で重複しています。

log4j 出力で重複が観察される理由は、同じアペンダーを同じカテゴリ (通常はルート) に複数回追加したか、アペンダーが累積的に継承されるという事実を無視して、同じアペンダーを異なるカテゴリに追加したためです。

log4j はアペンダーの重複を排除しません。つまり、同じアペンダーをカテゴリに n 回追加すると、そのアペンダーは n 回呼び出されてターゲットに追加されます。

少し異なる原因は、同じ基になる出力ターゲットをすべて共有するさまざまなアペンダーをいくつかのカテゴリに追加することです。この現象が最もよく発生するのは、BasicConfigurator.configure() メソッドが複数回呼び出されることです。呼び出されるたびに、このメソッドは System.out ターゲットを持つアペンダーをルート カテゴリに追加します。

もう 1 つのよくある間違いは、appender が階層から累積的に継承されることを忘れることです。たとえば、A というアペンダーをルート カテゴリに追加すると、他のすべてのカテゴリは A をアペンダーとして継承します。したがって、A をカテゴリ (C など) に追加すると、カテゴリ C の有効なステートメントは A に 2 回出力されます。1 回は A がルートにあるため、もう 1 回は C にあるためです。

于 2012-05-24T17:49:09.433 に答える
-1

log4j.xmllog4j構成ファイル(または)で提供したアペンダーを確認してくださいlog4j.properties。構成に複数のリストがあり、ロガーがステートメントを複数回ログに記録している可能性があります。

そうでない場合は、ここに構成の詳細を貼り付けてください。確認できます。

于 2012-05-24T14:19:13.503 に答える
-1

Webアプリケーションでは、Javaはリクエストごとに個別のスレッドを作成するため、(ログを入れる)関数が複数回呼び出され、毎回ログが生成される場合があります。

于 2012-05-24T14:11:12.520 に答える