8

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に送られますが、役に立たなかったようです。

4

6 に答える 6

13

この答えを参照してください: log4jを正しく初期化する方法は?

-Dlog4j.debugは、このような問題に非常に役立ちます

于 2012-06-29T23:19:47.273 に答える
2

最終的にロギングが正しく機能するようになった最新の変更は、クラスローダーモードを「PARENT_FIRST」に変更し、WARクラスローダーポリシーを「アプリケーション」に変更することでした。初期のデフォルト構成は「PARENT_FIRST」/「Module」でした。同僚のアドバイスを受けて、「PARENT_LAST」/「Application」に変更しました。ログは正常に機能し、このアプリケーションの新しいサンドボックスを作成するときに変更する必要があるのはこれだけです。なぜ「PARENT_FIRST」/「Application」を使用しなければならなかったのかわかりませんが、少なくとも今は機能しています。


アップデート:

新しいワークスペースを設定しようとしましたが、同じ問題が発生しました。「PARENT_FIRST」/「Application」と、META-INF/servicesに「org.apache.commons.logging.impl.Log4jFactory」を含む1行のorg.apache.commons.logging.LogFactoryという名前のファイルが必要であることがわかりました。 。ファイルがないと、ログが失敗します(通常、Log4Jが見つからないというメッセージが表示されます)。

于 2012-07-04T21:23:36.620 に答える
0

これはまったく同じ症状ではないことはわかっていますが、アプリケーション(またはアプリケーションが使用するもの)がCommons Loggingを使用している場合、log4jに既知の問題があります。この質問/回答が適切かどうかを確認してください。

于 2012-07-02T13:30:24.193 に答える
0

ログファイルを作成できません。SpringWebサービスアプリケーションでlogback.xmlファイルを使用し、Websphereサーバーにデプロイしました...しかし、log4j.propertiesファイルを使用すると、ログファイルが作成されます。log4jとslf4jに適切な適切な依存関係を与えました。logback.xmlファイル

<file>C:/abc/myLogFile.log</file>
<append>true</append>
<encoder>
  <pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder></appender>

`

依存:

<dependency>
    <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>${logback.version}</version>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-core</artifactId>
      <version>${logback.version}</version>
    </dependency>
于 2014-08-25T09:39:17.943 に答える
0

log4jが私のプロジェクトの1つで何も表示しないという問題がありました。log4j2.xmlファイルのクラス名に先頭のスペースを追加したことが判明しました。Log4jは、クラス名による辞書検索を実行します。したがって、クラス名の先頭または末尾のスペースは、その特定のエントリを無効にします。

于 2015-06-09T20:57:26.683 に答える
0

ちょうど私の2セント-私はこのようなことが起こっていました-しかし私の場合、私は私のロギングコールからいくつかの出力を見ることができました。構成がどこかから取得されたことが明らかであり、私が変更したものは何の影響も及ぼしませんでした。

ここで提案されているように-Dlog4j.debug=trueをオンにした後、log4jがTomcatの作業ディレクトリ内にあるlog4j.xmlという名前のファイルを取得していることが明らかになりました。それは私がやっていた他のことからの残り物であったか、または私の誤って構成されたライブラリの1つにあるlog4j構成から何らかの形で生成されました。

作業ディレクトリの内容を消去することを考えていませんでした(試した可能性があります。[編集:試しましたが、機能しませんでした])-ハードコードされた参照を-Dlog4jを介してプロパティファイルに渡すことだけでした。 .configuration = log4j.properties(絶対パスを使用したくありませんでした)(xmlではなくプロパティファイルを使用していたことがありました)-そしてそれは機能しました。

[編集:まあ、それはサーバー構成では機能しませんでした。私はついに何が悪かったのかを発見しました-プロジェクトにJARとして含めていたいくつかの自家製ライブラリには、独自のlog4j.xmlファイルとlog4j.propertiesファイルがあり、これらは明らかに自分のプロパティファイルよりも早く読み取られ/見つかりました-正しいことこれらの冗長なプロパティファイルをJARから削除することでした]

于 2019-11-26T08:29:31.393 に答える