2012-01-25 21 views
2

私はJRuby on Railsアプリケーションのログインにlog4jを使用しています。私がアプリケーションを押し出すたびに、ログは別の最終的なデスティネーションに追加されています。時にはそれはcatalina.outです。時にはlocalhost-date.logです。時にはcatalina-date.logです。JRuby + Tomcat6 + log4jを使用した非決定論的ログ

なぜ毎回同じのではないのか分かりません。

私の環境でログが信頼できない理由を確認できるものは何ですか?

答えて

3

これは実際にはかなり変わっています - Apache Commons Loggingも偶然使用していますか?

それは暗闇の中でわずかだが、私はlog4jおよび/またはロギングコモンズとの奇妙な何かを経験するたびに、私はすぐに(Think again before adopting the commons-logging API、あるいはより包括的なを参照してください、特に後者で十分に文書化の問題をリコールし、再訪簡潔log4j and the thread context classloaderためdelfuegoの答えにまとめたバージョンTaxonomy of class loader problems encountered when using Jakarta Commons Logging)、:

あなたは、彼らが途方もなく 苦労発見を持っている、すなわちこと、)ライブラリロギングにlog4jの主要な問題(と はApache Commonsのにつまずいているように見えます右側のクラスローダーと対話して、 として使用されています。

クラスローダの問題の本質を考えると、私もあなたの問題をトリップ、それを想像することができ、すなわち、現在お使いのログに配線を終了したクラスローダによっては、異なるログプロパティの検索パスとそれぞれのデフォルトを使用する場合があります同様に、Why can't log4j find my properties file in a J2EE or WAR application?を参照してください。

短い答えを:log4jのクラスとプロパティファイルには、同じクラスローダの範囲内 ではありません。

J2EEまたはサーブレットコンテナ は、Javaのクラスローディングシステムを利用しています。 Sunは、クラスローディング がJava 2のリリースで動作する方法を変更しました。Java 2では、クラスローダーは階層親子関係で に配置されています。子クラスローダー がクラスまたはリソースを見つける必要がある場合、最初にその要求を親の に委譲します。 [...]

ような問題は、(ところでlog4jのと同じ著者を持つようにたまたま、CekiGülcü。)通常、実際にSimple Logging Facade for Java (SLF4J)に切り替えることで解決するのは簡単です、同様にdelfuegoによって示唆されているように:

[...] take-homeメッセージは、 の新しいログフレームワークであるSL4Jの主な原動力の1つで、これらの問題を完全に排除することでした。 あなたはそれを交換し、あなたの人生がより簡単になるかどうかを確認したいかもしれません。

最後に、ジョンの冒険(今日未解決のような)Logging with log4j on tomcat jruby-rack for a Rails 3 applicationでは、それぞれの問題と同様SL4J経由で可能な解決策にほのめかしているようです。

幸運を祈る!

関連する問題