ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Apache Jakarta Projectコミュのlog4jのログ

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちは。

今日、TomcatのWebアプリのログが数日前から全く出なくなっていたのに気づきました。
ログ出力にはlog4jを用いています。
tomcatのJAVA_OPTSに-Dlog4j.debug=trueを追加すると、以下のように出力されました。

log4j: Trying to find [log4j.xml] using context classloader WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@13dd208.
log4j: Trying to find [log4j.xml] using org.apache.catalina.loader.StandardClassLoader@13dd208 class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader WebappClassLoader
delegate: false
repositories:
/WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@13dd208.
log4j: Trying to find [log4j.properties] using org.apache.catalina.loader.StandardClassLoader@13dd208 class loader.
log4j: Trying to find [log4j.properties] using ClassLoader.getSystemResource().
log4j: Could not find resource: [null].
log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).
log4j:WARN Please initialize the log4j system properly.


WEB-INF/classesに配置しているlog4j.xmlが、読み込めていないようです。
アプリには細かな修正が頻繁にありますが、log4j.xmlを含めロガーがらみは1年以上変更がありません。

「Could not find resource: [null]」あたりを調査しても、classpathに置いていなかっただけか、または未解決で終わっているかのようで、解決に至りませんでした。
Webアプリ自体は使えていますのでclasspathが変わったということもないでしょうし、手詰まりになっています。

試しにlog4j.xmlをsharedのclasspathへ入れてみると、今度はAppenderが見つからないとエラーになりました。
(Appenderは自前のものでWebアプリに含まれ、WEB-INF/classesの下にあります)

どなたか同様の症状から回復された方がいらっしゃいましたら、教えてください。

コメント(6)

ログ最終行
「log4j:WARN Please initialize the log4j system properly.」
の指示通りに、log4jシステムプロパティ(のURL)を指定してみては?
↓
java -Dlog4j.configuration=file:///home/foo/log4j.xml
(/home以降はお使いの環境に読替えてください。)
ありがとうございます。
しかし、それでは仮に出力できたとしても二点問題があります。
・Webアプリの独立性がなくなる
・数日前に突然動作しなくなった説明にならない

最初から動かない、あるいはアプリが丸切り動かなくなったならともかく、ある日いきなりxmlだけを読まなくなったところを気にしています。
その後いくつかのサイトを当たってみると、各Webアプリが起動する前(WEB-INF/classesがclasspathになる前)に、log4jの初期化が走っているようです。
なぜいきなり…。
他のホストでは問題なく動いているのも、分からないところです。
だいぶ経っていますが、本件いまだ解決しておりません。
Loggerクラスに以下を加えたところ、ファイルだけは作成されるようになりました(つまり、log4j.xmlは読み込まれました)。

DOMConfigurator.configure(Log.class.getResource("log4j.xml"));

が、肝心のログは一切出力されず、空のままです…。

Logger.getLog(className).info(message)等を実行していることは確認しましたが、自前のAppender#append()には到達していないようです。

なにか情報をお持ちであれば、よろしくお願いいたします。
すみません、先ほど原因が分かりました。
log4j〜.jarとcommons-logging.jarが、他のホストでは共有ディレクトリ/libとWebアプリのWEB-INF/libの両方に、配置されていました。
Webアプリ下のものを読み込む際にclasses/log4j.xmlが参照され、無事動作しているようでした。

ちょっといびつな構成になっているのが分かりましたが、ひとまず解決ということでクローズします。
お騒がせしました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Apache Jakarta Project 更新情報

Apache Jakarta Projectのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング