Tomcat在Linux环境下使用log4j进行日志轮换后无法记录到catalina.out日志文件

3
我使用log4j来轮换catalina.out文件。在Linux环境下,第一次日志轮换后,Tomcat开始记录到由log4j创建的新文件中,而不是原来的catalina.out文件。在Windows环境下一切正常。

以下是我的log4j.properties文件:

log4j.rootLogger=ALL, file

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=${catalina.home}/logs/catalina.out
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[Java] %d{yyyy-MM-dd HH:mm:ss} - %5p - %c{1} : Line No. %L - %m%n
log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH
log4j.appender.FILE.Append=true

请提供建议。

Tomcat本身是否使用log4j来记录消息? - Kenster
@Kenster,不行。我有很多的应用程序在写入catalina.out(通过System.out.Println)。 - Linguistic
如果这些应用程序使用了System.out.println,那么您需要修复它们。 - Christopher Schultz
1个回答

3
catalina.out 文件实际上是通过在使用 bin/catalina.sh 等命令启动 Tomcat 时从 shell 进行输出重定向而创建的。如果您尝试使用 log4j 旋转该文件,则会用 log4j 日志覆盖该文件。Tomcat 仍然记录到旧的 catalina.out,但该文件已不存在。

您应该将 log4j 指向不同的日志文件,并根本不旋转 catalina.out。如果您一定要旋转 catalina.out,请使用其他技术。

如果您的 catalina.out 中充满了应用程序的 System.out.println 垃圾,请阅读有关 Tomcat 中的 swallowOutput 选项的信息。这将捕获 System.outSystem.err 并将其重定向到文件而不是转储到标准输出。


首先感谢您的关注。我一开始无法修复这些应用程序,现在Tomcat第一次使用log4j记录到新创建的文件中。 - Linguistic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接