如何在Tomcat中记录stdout输出?

时间:2011-10-12 12:44:33

标签: java tomcat log4j

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

运行TOMCAT/bin/startup.bat时打开的控制台窗口显示stdout的输出,但它未保存到TOMCAT/logs/catalina.<date>.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

3 个答案:

答案 0 :(得分:10)

之前我遇到过类似的问题,并且还没有找到办法在Windows unless you are running Tomcat as a Windows service中记录System.out。这似乎默认在Unix中有效,因为startup.sh指向catalina.sh,它将stdout记录到catalina.out文件,如下所示

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

在log4j中,ConsoleAppender本身不附加到文件,仅附加到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

另见

How to log exceptions from a specific package deployed in tomcat

log select events into a separate file

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

答案 1 :(得分:1)

您是否检查过是否可以从您的应用程序中找到log4j.properties文件? 也许您可以通过设置像

这样的硬编码文件路径来检查
  

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

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

答案 2 :(得分:0)

如果我在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。但后来我不明白输出如何到达你的输出窗口:/