私が働いている場所では、WebアプリケーションのロギングにLog4jを使用しています。log4j.jarは、コンテナーレベルではなく、アプリケーションレベルにあります。毎日ローリングファイルアペンダーを使用しています。log4j.propertiesファイルは、アプリのパッケージ名に基づいてアペンダーを定義するため、アプリケーションのパッケージ以下のクラスのみがアプリのログファイルに記録されます。
私のアプリケーションでは、いくつかのサポートクラスを使用してフレームワークを拡張しています。これらのクラスは、私のアプリケーション専用ではなく、最終的には他のアプリケーションで使用するためにjarライブラリになるため、アプリケーションのパッケージには含まれていません。このため、ログステートメントはアプリケーションのアペンダーによって取得されないため、アプリケーションのログファイルにログに記録されません。
jar内のクラスが、クラスを使用してアプリケーションのログファイルにログを記録できるようにしたい。ただし、クラス名に基づいてアプリケーションのlog4jプロパティファイルにアペンダーを作成すると、log4j.propertiesファイルのクラス名が同じであるため、複数のアプリケーションがjarを使用している場合、1つのアプリケーションログファイルのみがjarのロギングステートメント、およびそのjarを使用するすべてのアプリケーションからすべてのロギングステートメントを受信すること。静的なLogger.getLogger()呼び出しを使用してロガーを取得しているため、これが当てはまると思います。
私は最初に、私の恐れが有効かどうかを知りたいと思います。これが、同じまたは異なるコンテナー内の複数のWebアプリケーションが私のjarを同時に使用しているときに実際に起こることであるかどうか。
また、この振る舞いが変化する「境界」があるかどうかも知りたいです。たとえば、log4j.jarがコンテナレベルのjarであるかアプリレベルのjarであるか、または各コンテナが別々のJVMで実行されているかどうかに関係なく、この問題は存在しますか?
最後に、この場合、問題を克服するためにどのような戦略を使用すべきかを知りたいと思います。
前もって感謝します!