Log4Jを使用してアクティビティをログに記録することになっている既存のWebアプリケーションを選択しました。指示どおりにワークスペースを構成しましたが、ログファイルに何も書き込まれていないことを除いて、他のすべて(db接続、認証など)は正常に機能します。他の同様のアプリケーションは、ロギングに問題はありません。
アプリケーションの起動時にWebSphereコンソールを確認しましたが、Log4Jがログに記録されない理由を示す可能性のあるエラーはありません。
私はこれを別の開発者(このアプリケーションに取り組んだことがありますが、しばらくはなく、私よりも古くなっています)に言及しました。この開発者は、これは非常に奇妙な動作であると述べましたが、なぜログに記録されないのかわかりませんでした。エラーを報告しません。
設定ファイルとプロパティファイルを確認しましたが、すべて問題ないようです。Log4Jがlog4j.xmlを読み取っていないのではないかと思いますが、それは確かではありません。Log4Jを使用してからしばらく経ちましたが、この種の問題をトラブルシューティングするためのヒントはありますか?
PS:さまざまなtest / QA / prodサーバーにデプロイされているこのアプリケーションのインスタンスがあり、これらのインスタンスはすべて正常にログに記録されます。ロギングが黙って失敗するように見えるのは、ローカルワークステーションだけです。
更新:したがって、アプリケーションのデプロイ方法に問題があるようです。クラスローダーモードを「ParentLast」に変更しましたが、Log4Jファイルが少なくとも現在読み取られていることがわかります。そして、私が試みた最初のアクションは、見つからないClassNotFoundException
ということわざを引き起こします。org.apache.commons.logging.impl.Log4jFactory
2回目の更新:
奇妙なことに気づきました...アプリケーションには2つのWARプロジェクトがあります。1つはUI用で、もう1つは一部のWebサービス用です。UI用のプロジェクトは、その操作をログファイルに正常に記録しています。Webサービスプロジェクトは、で失敗するプロジェクトですClassNotFoundException
。どちらにもcommons-logging.jarがJavaEEモジュールの依存関係としてリストされており、どちらにもプロジェクト固有のログ構成はありません(すべての構成ファイルはResourcesプロジェクトにあります)。
主な違いは、そのUIプロジェクトには、必要なロギング構成がすでに含まれている可能性のある他の社内フレームワーク(JARとしてプリコンパイルされている)が含まれていることです。
また、この質問からの回答(META-INF / services内のorg.apache.commons.logging.LogFactoryという名前のファイルで、「org.apache.commons.logging.impl.Log4jFactory」を含む1行)を使用しようとしました。WebsphereのすべてのログはSystemOut.logに送られますが、役に立たなかったようです。