如何在Tomcat中记录stdout输出?

有没有办法将所有stdout输出记录到Tomcat中的catalina.log文件? (即打印到System.out.println()

运行TOMCAT/bin/startup.bat时打开的控制台窗口显示stdout的输出,但它不会保存到TOMCAT/logs/catalina..log

我的具体问题是我在log4j中定义了一个控制台appender以输出到控制台。 这些日志消息在Tomcat控制台窗口中正确显示,但它们不会写入catalina.log。 我在Windows上运行Tomcat 5.5。 谢谢。

编辑:

这是我的log4j.properties文件。 它位于TOMCAT/webapps/app/WEB-INF/classes/log4j.properties

 log4j.rootCategory=DEBUG, console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n 

之前我遇到过类似的问题,并且没有找到办法在Windows中记录System.out, 除非您将Tomcat作为Windows服务运行 。 这似乎在Unix中默认工作,因为startup.sh指向catalina.sh ,它将stdout记录到catalina.out文件,如下所示

 org.apache.catalina.startup.Bootstrap "$@" start >> "$CATALINA_BASE"/logs/catalina.out 2>&1 & 

在log4j中, ConsoleAppender本身不会附加到File,只会附加到System.out

但是,我已经修改了你的log4j属性来添加FileAppender并且这个配置有效,但当然这会记录到一个单独的日志文件中。

新配置

 # Set root logger level to DEBUG. log4j.rootLogger=DEBUG, console, myFile log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE} %-5p %c{1}]: %m%n # myFile writes to file log4j.appender.myFile=org.apache.log4j.RollingFileAppender log4j.appender.myFile.File=logs/tomcatlog4j.log log4j.appender.myFile.MaxFileSize=100KB log4j.appender.myFile.layout=org.apache.log4j.PatternLayout log4j.appender.myFile.layout.ConversionPattern==[%d{ABSOLUTE} %-5p %c{1}]: %m%n 

产量

= [15:24:03,819 INFO A1]:在my.jsp中= [15:24:03,975 INFO A1]:出于my.jsp = [15:24:04,880 INFO A1]:在my.jsp = [15: 24:04,880 INFO A1]:出自my.jsp

也看到了

如何从tomcat中部署的特定包中记录exception

将选择事件记录到单独的文件中

https://serverfault.com/questions/201178/tomcat-5-5-how-to-redirect-the-logging-output-to-one-file-per-web-application

您是否检查过是否可以从您的应用程序中找到log4j.properties文件? 也许你可以通过设置像这样的硬编码文件路径来检查

-Dlog4j.configuration =文件:/// C:\开发\ log4j.properties

如果在这些更改后写入日志,则log4j文件的相对路径是错误的。

如果我在logging.properties中查看tomcat 5.5的默认日志记录配置:

 org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler 

这看起来好像stdout的web应用程序可能只记录到INFO级别以上的文件,退回http://tomcat.apache.org/tomcat-5.5-doc/logging.html说明在tomcat JULI日志记录配置中记录器在分配了自己的处理程序时不使用父处理程序。 该文件也应该是localhost而不是catalina 。 但后来我不明白输出如何到达你的输出窗口:/