1

我在 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。哦,好吧,我达到了预期的结果,所以是时候继续前进了。

4

2 回答 2

0

请尝试这个(第一次测试日志文件的物理路径)并尝试使用不同版本的 log4j jar

jar 版本 log4j-1.2.14.jar

log4j.watch=true

log4j.readtime=30000

log4j.rootCategory=DEBUG,applicationlogging log4j.rootCategory=DEBUG,strutslogging log4j.category.applicationlogging=DEBUG,applicationlogging log4j.category.org=DEBUG,strutslogging

log4j.logger.org.apache.commons.httpclient=调试 log4j.logger.httpclient.wire.header=OFF log4j.logger.httpclient.wire.content=OFF log4j.additivity.applicationlogging = false log4j.additivity.strutslogging = false log4j .appender.applicationlogging=org.apache.log4j.RollingFileAppender log4j.appender.applicationlogging.File=C:/logs/app.log log4j.appender.applicationlogging.MaxFileSize=3000KB log4j.appender.applicationlogging.MaxBackupIndex=50 log4j.appender。 applicationlogging.layout=org.apache.log4j.PatternLayout log4j.appender.applicationlogging.layout.ConversionPattern=%d - %m%n

于 2013-07-10T07:27:34.183 回答
0

${catalina.home}/lib 中有一个 log4j.xml,它在容器级别配置 log4j。我们只部署了一个应用程序,因此使用 lib/log4j.xml 非常适合我的用例。

于 2013-07-12T16:29:16.513 回答