有没有办法将所有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
答案 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
答案 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
。但后来我不明白输出如何到达你的输出窗口:/