【问题标题】:How to log stdout output in Tomcat?如何在 Tomcat 中记录标准输出?
【发布时间】:2011-10-12 12:44:33
【问题描述】:

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

运行TOMCAT/bin/startup.bat 时打开的控制台窗口显示来自标准输出的输出,但它没有保存到TOMCAT/logs/catalina.<date>.log

我的具体问题是我在 log4j 中定义了一个控制台附加程序以输出到控制台。这些日志消息正确显示在 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

【问题讨论】:

  • 当您将tomcat作为Windows服务而不是使用启动bat启动时,它是否会记录到catalina.log?
  • @Gandalf 我不知道。我不想将它作为服务运行。
  • 你在哪里配置了控制台附加程序的 log4j?每个 Web 应用程序还是在 tomcat 本身上?
  • @Gandalf 它在我的网络应用程序中。所以它位于:TOMCAT/webapps/app/WEB-INF/classes/log4j.properties
  • @Gandalf Tomcat 似乎使用 java.util.logging...log4j 是否可能不兼容?

标签: java tomcat log4j


【解决方案1】:

我之前遇到过类似的问题,但没有找到通过在 Windows unless you are running Tomcat as a Windows service 中记录 System.out 来解决此问题的方法。这似乎在 Unix 中默认有效,因为startup.sh 指向catalina.sh,它将标准输出记录到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

【讨论】:

  • 所以你是说在 Linux 上,ConsoleAppender 会写入 catalina.out,但在 Windows 上它不会,除非 Tomcat 作为服务运行?
  • @Michael:我可以确认 ConsoleAppender 确实在 Linux 上写入 catalina.out。我已经测试过了。
  • 好的,谢谢,我只是想确保我明白你在说什么。所以听起来我的问题的答案是,“不,如果 Tomcat 作为服务运行,ConsoleAppender 只会在 Windows 上写入 catalina.log”
【解决方案2】:

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

-Dlog4j.configuration=file:///C:\Dev\log4j.properties

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

【讨论】:

  • 它在我的类路径的根目录中。所以它位于:TOMCAT/webapps/app/WEB-INF/classes/log4j.properties.
【解决方案3】:

如果我在 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

在我看来,好像 Web 应用程序的标准输出可能只记录到 INFO 及以上级别的文件中,重新考虑 http://tomcat.apache.org/tomcat-5.5-doc/logging.html 声明在 tomcat JULI 日志记录配置记录器中,当它们被分配自己的处理程序时,它们不使用父处理程序.此外,该文件的前缀应为 localhost 而不是 catalina。但是后来我不明白输出是如何进入您的输出窗口的:/

【讨论】:

  • 谢谢。我尝试将所有这些级别从“INFO”更改为“DEBUG”,但没有任何标准输出输出出现在任何日志文件(catalina、localhost、manager 或 host-manager)中。我将不得不更详细地阅读该链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
相关资源
最近更新 更多