ROOT としてデプロイされた 1 つのアプリケーションを使用して、Amazon Linux (バージョン 201303) にクリーンな tomcat 7 をインストールしています。log4j-1.2.17.jar は WEB-INF/lib にあります。以下を含む WEB-INF/classes に log4j.properties ファイルがあります。
log4j.rootLogger=DEBUG,A1, A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd}-%t-%x-%-5p-%-10c:%m%n
log4j.appender.A2.File=${catalina.home}/logs/app.log
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.DatePattern='.' yyyy-MM-dd
log4j.appender.A2.MaxFileSize=10MB
log4j.appender.A2.MaxBackupIndex=99
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS}-%t-%x-%-5p-%-10c:%m%n
アプリでは、log4j がインスタンス化されます
static Logger logger = Logger.getLogger(ClassName.class.getName());
app.log は作成されません。手動で作成すると、書き込まれることはありません。進行中の唯一のログは、logs/catalina.out にあります。私は何が欠けていますか?http://tomcat.apache.org/tomcat-7.0-doc/logging.htmlを何度か読みました。次の抜粋は、私のアプローチを確認しているようです。
独自の Web アプリケーションで log4j を使用するだけの場合、これらの手順は必要ありません。— その場合、log4j.jar と log4j.properties を Web アプリケーションの WEB-INF/lib と WEB-INF/classes に入れるだけです。
catalina_home/lib には log4j.jar と log4j.xml があり、catalina_home/conf には log4j.properties があります。それらは、WAR に含まれる jar と競合する可能性がありますか? catalina.out にエラーはありません。
アップデート
そのため、WEB-INF/classes の log4j.properties がロードされているようです。ConsoleAppender (log4j.appender.A1) を削除すると、ログ メッセージが catalina.out に表示されなくなりました。元に戻すと、ログ メッセージが catalina.out に再表示されました。奇妙なのは、変換パターンがログと一致していないように見えることです。%d{yyyy-MM-dd}-%t-%x-%-5p-%-10c:%m%n
のようなものを生成するべきではありません2013-07-10 INFO ClassName Log message
か? 代わりに私は見て14:39:29,180 INFO [ClassName] Log message
います。
更新 2
私は自分の答えを見つけました。コンテナー レベルで log4j を構成していた ${catalina.home}/lib に log4j.xml がありました。Tomcat で行っていたことを実際に新しいものにしていれば、もっと早く理解できたと思います。lib/log4j.xml の構成を開始すると、期待どおりの結果が得られました。アプリが独自の log4j.properties を使用するのではなく、その構成を継承した理由については、まだ少し混乱しています。まあ、意図した結果が得られたので、先に進みます。