【问题标题】:Tomcat System.out redirectionTomcat System.out 重定向
【发布时间】:2014-12-03 09:05:48
【问题描述】:

我们有一个遗留的 Java 应用程序,在 Tomcat 上运行。它以某种不一致的方式记录其事件,有时甚至依赖于 System.out/err。这些 stdout/stderr 记录最终在 catalina.log 中与“正确记录的”事件混合在一起。我们想将 stdout/stderr 日志流分离到单独的文件中(并最终摆脱它们),但我们不知道该怎么做。服务器运行默认的 JULI 配置,但我们对任何其他选项(例如 SLF4J + Logback)持开放态度。

【问题讨论】:

  • 您是否在寻求有关如何将日志框架附加到应用程序的建议?您是否要修改应用程序的源以重定向日志,或者您是否正在寻找一种方法来在它已经部署后重定向它的日志记录(因为这似乎非常困难)
  • 我们最终会修改源代码(删除 System.out.print 并使用正确的日志记录),但现在我正在寻求有关部署配置的建议。我希望 Tomcat 不要将 stdout/stderr 混合到 catalina.log 中,而是将它们发送到其他文件。
  • 那么任何高级日志框架都可以 - log4j, slf4j+logback, log4j v2, ... 只需唯一地命名记录器,用日志调用替换 Syste.out/err println() 并配置您的日志appenders 将其放入单独的文件中。

标签: java tomcat logging java.util.logging


【解决方案1】:

这完全解释了它:Log4J 只需将 log4j.jar 和 log4j.properties 放入 Web 应用程序的 WEB-INF/lib 和 WEB-INF/classes 中。使用以下内容创建一个名为 log4j.properties 的文件并将其保存到$CATALINA_BASE/lib

将停止输出到标准输出的 log4j.properties 示例:

log4j.rootLogger=INFO, yourapp

#Define all the appenders

log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8

#Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.
log4j.appender.MANAGER.Append=true
log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.
log4j.appender.HOST-MANAGER.Append=true
log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

#Configure which loggers log to which appenders

log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\INFO, HOST-MANAGER

#You can define your Applog here: 

log4j.appender.yourapp=org.apache.log4j.RollingFileAppender
log4j.appender.yourapp.File=${catalina.base}/logs/yourapp.log
log4j.appender.yourapp.MaxFileSize=100MB
log4j.appender.yourapp.MaxBackupIndex=10
log4j.appender.yourapp.layout=org.apache.log4j.PatternLayout
log4j.appender.yourapp.layout.ConversionPattern=%d %p [%c] (%t) - <%m>%n

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2019-04-17
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多