我在 amazon linux(版本 201303)上安装了一个干净的 tomcat 7,其中一个应用程序部署为 ROOT。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
我找到了我的答案。${catalina.home}/lib 中有一个 log4j.xml,它在容器级别配置 log4j。我想如果我真的更新了我在 Tomcat 中所做的事情,我会很快弄清楚。一旦我开始配置 lib/log4j.xml 我得到了预期的结果。我仍然有点困惑为什么我的应用程序继承了该配置而不是使用它自己的 log4j.properties。哦,好吧,我达到了预期的结果,所以是时候继续前进了。