2011-12-28 21 views
3

私は以下の質問があります。 log4jは、同じGlassFishサーバーでホストされている2つのプロジェクトで使用します。各プロジェクトにはlog4j.propertiesファイルがあり、ファイルを指しており、異なるカタログに基づいています(Project1Project2)。log4jはスレッドセーフですか?

いくつかの不明な理由から、最初のプロジェクトの情報メッセージがProject2ログファイルに書き込まれることがあります。逆も同様です。私は両方のプロジェクトのlog4j.propertiesファイルをチェックしましたが、他のプロジェクトのログには何も表示されません。

log4jは実際にスレッドセーフではないため、2人のユーザーが2つのシステムで同時に作業していると、ロガーのメッセージが混在する可能性があります。この疑惑は正しいのでしょうか?

+0

スレッドの問題ではなく、設定ミスのように聞こえることがあります。 –

+0

それでは、設定ファイルが異なる2つのプロジェクトが互いに影響を与える可能性があります。各設定に他のプロジェクトのログにリンクが全くない場合 –

答えて

5

はい、log4jのは、スレッドセーフである:

はい、log4jのは、スレッドセーフです。 Log4jコンポーネントは、重度マルチスレッドシステムの で使用するように設計されています。

Ref

あなたが説明していることは、クロスプロセス/スレッディングの問題ではなく、設定ミスのようなものです。

3

はい、log4jはスレッドセーフです。理由はAppenderSkeleton.doAppend()メソッドが同期されているためです。 しかし、プログラムで設定する場合は注意してください。 たとえば、別のアペンダーでTTCCLayoutの同じインスタンスを使用することはできません(javadocを参照)!メソッドフォーマット()のPatternLayoutを見てください。それはインスタンスフィールド(StringBuffer sbuf)を変更するので、異なるappendersで同じPatternLayoutインスタンスを使用する場合は競合条件に直面します。 EnhancedPatternLayoutがより良いです、彼らはフォーマットの方法を変更しました。

関連する問題