2012-06-29 20 views
5

Log4Jを使用してログを記録するはずの既存のWebアプリケーションを取得しました。私は言われたように正確に自分のワークスペースを構成しました。(DB接続、認証など...)何もログファイルに書き込まれていないことを除いて正常に動作します。他の同様のアプリケーションでは、問題のログはありません。Log4Jは何もログに記録しません

私は、アプリケーションが起動したときにWebSphereコンソールを見てきましたが、Log4Jがログを記録していない理由を示すエラーはありません。

これは私がこれを非常に奇妙な動作であると述べたが、それがなぜそれほどわからなかったのか、他のdev(これは一度このアプリケーションで作業したが、ログに失敗し、エラーを報告しない可能性があります。

私は設定ファイルとプロパティファイルをすべてオーバーしました。と思われます。私はLog4Jがlog4j.xmlを読むことさえ決してないと思うが、私は確信していない。 Log4Jで作業して以来、しばらくお待ちしております。誰かがこのタイプの問題をトラブルシューティングするための良いヒントを持っていますか?

PS:このアプリケーションのインスタンスはさまざまなテスト/ QA/prodサーバーに展開されており、これらのインスタンスはすべて正常にログに記録されます。ローカルワークステーション上ではのみで、ロギングが黙って失敗するようです。


更新:だから、アプリケーションが展開されている方法に問題があるように見えるん。 クラスローダーモードを "Parent Last"に変更したところ、Log4Jファイルが少なくとも今読まれていることがわかりました。そして私が試みる最初のアクションはClassNotFoundExceptionorg.apache.commons.logging.impl.Log4jFactoryが見つかりません。


第二の更新: 私は見知らぬ人に何かを気づいた...アプリケーションは、2つのWARプロジェクトを持っている - そのうちの一つは、UIのためであり、他には、いくつかのWebサービスのためのものです。 UI 用のプロジェクトは、です。操作はログファイルに正常に記録されます。 Webサービスプロジェクトは、ClassNotFoundExceptionで失敗するプロジェクトです。どちらもcommons-logging.jarがJavaEEモジュールの依存関係としてリストされており、いずれもプロジェクト固有のログ設定を持っていません(すべての設定ファイルはResourcesプロジェクトにあります)。

主な違いは、UIプロジェクトが(JARファイルとしてコンパイル済みの)かもしれないが既に必要なログ構成が含まれていることをいくつかの他の社内フレームワークが含まれており、違いがどこにあるかもしれないことがあるということです。

また、答えを使用しようとしました(「org.apache.commons.logging.impl.Log4jFactory」を含む1行のMETA-INF/servicesのorg.apache.commons.logging.LogFactoryというファイル)この質問から:Websphere all logs are going to SystemOut.logしかしそれは助けに見えなかった。

+0

それロガーインスタンスのタイプは何? RollingFileAppenderの場合 – Woot4Moo

+0

@ Woot4Moo:FileAppenderです。 – FrustratedWithFormsDesigner

+0

設定ファイルを投稿できますか?すべての環境で同じ設定ですか? – evanwong

答えて

2

私は最終的にきちんと「PARENT_FIRST」にクラスローダモードを変更し、「アプリケーション」へのWARクラスローダ方針た作業ログを得たことを変更し、最新のもの。最初のデフォルト設定は "PARENT_FIRST"/"Module"でした。私はそれを変更ログは彼らのために正常に動作し、これは、彼らがこのアプリケーションの新しいサンドボックスを作成するときに確認する必要が唯一の変更であると言う同僚のアドバイスに「PARENT_LAST」/「アプリケーション」へ。なぜ私は "PARENT_FIRST"/"Application"と一緒に行かなければならなかったのか分かりませんが、少なくとも今は動作しています。


UPDATE:

私は、新しいワークスペースを設定しようとしたと私は同じ問題を抱えていました。 「org.apache.commons.logging.impl.Log4jFactoryを」:それはあなたが「PARENT_FIRST」/「アプリケーション」AND含む一行とのMETA-INF/servicesにorg.apache.commons.logging.LogFactoryという名前のファイルが必要判明します。ファイルを持たないと、ロギングが失敗します(通常、Log4Jが見つからないというメッセージが表示されます)。

0

のような問題のために非常に有用である私は、これはあなたの正確な同じ症状ではありません実現が、あなたのアプリケーション場合のlog4jに関する既知の問題があります(またはそれが使用するもの)はCommons Loggingを使用します。 this question/answerが適切かどうかを確認してください。

0

ログファイルを作成することができません、私は春のWebサービスアプリケーションでlogback.xmlファイルを使用して、WebSphereサーバーに展開している...しかし、私はlog4j.propertiesが、それがログファイルを作成しているファイルを使用していたとき。私はlog4jのが表示されていなかった問題を抱えていた

<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> 
0

:私は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> 

`

依存を提出しています私のプロジェクトの中の何か。私はlog4j2.xmlファイルのclassnameに先行スペースを追加しました。 Log4jはclassnameによる辞書検索を行います。したがって、クラス名の先頭または末尾のスペースは、その特定のエントリを無効にします。

関連する問題