6

私が働いている場所では、WebアプリケーションのロギングにLog4jを使用しています。log4j.jarは、コンテナーレベルではなく、アプリケーションレベルにあります。毎日ローリングファイルアペンダーを使用しています。log4j.propertiesファイルは、アプリのパッケージ名に基づいてアペンダーを定義するため、アプリケーションのパッケージ以下のクラスのみがアプリのログファイルに記録されます。

私のアプリケーションでは、いくつかのサポートクラスを使用してフレームワークを拡張しています。これらのクラスは、私のアプリケーション専用ではなく、最終的には他のアプリケーションで使用するためにjarライブラリになるため、アプリケーションのパッケージには含まれていません。このため、ログステートメントはアプリケーションのアペンダーによって取得されないため、アプリケーションのログファイルにログに記録されません。

jar内のクラスが、クラスを使用してアプリケーションのログファイルにログを記録できるようにしたい。ただし、クラス名に基づいてアプリケーションのlog4jプロパティファイルにアペンダーを作成すると、log4j.propertiesファイルのクラス名が同じであるため、複数のアプリケーションがjarを使用している場合、1つのアプリケーションログファイルのみがjarのロギングステートメント、およびそのjarを使用するすべてのアプリケーションからすべてのロギングステートメントを受信すること。静的なLogger.getLogger()呼び出しを使用してロガーを取得しているため、これが当てはまると思います。

私は最初に、私の恐れが有効かどうかを知りたいと思います。これが、同じまたは異なるコンテナー内の複数のWebアプリケーションが私のjarを同時に使用しているときに実際に起こることであるかどうか。

また、この振る舞いが変化する「境界」があるかどうかも知りたいです。たとえば、log4j.jarがコンテナレベルのjarであるかアプリレベルのjarであるか、または各コンテナが別々のJVMで実行されているかどうかに関係なく、この問題は存在しますか?

最後に、この場合、問題を克服するためにどのような戦略を使用すべきかを知りたいと思います。

前もって感謝します!

4

2 に答える 2

2

log4j.jar が Web アプリのみにある場合、ログは個別に保持されるため、すべてのログが個別に保持されるように、各 Web アプリには独自の log4j.jar と log4j.properties が必要です。

于 2009-01-16T20:53:50.563 に答える
0

問題は、log4j の推奨されるパターンは静的な *Configurator メソッドを使用することであり、これはアプリケーション コンテナーにはあまり適していません。

この記事は、私が遭遇したときにこの問題を解決しました...

于 2009-01-16T20:59:20.770 に答える