简体   繁体   English

停止tomcat写入stdout和stderror

[英]Stop tomcat writing to stdout and stderror

We use docker. 我们使用docker。 We use fluentd as our logging driver for our docker containers. 我们使用流利的作为我们的docker容器的日志记录驱动程序。 We use tomcat to serve java applications. 我们使用tomcat来提供java应用程序。 When there is an exception thrown in a java application we use a log4j to handle that exception. 当java应用程序中抛出异常时,我们使用log4j来处理该异常。 To control the logging I have installed log4j in tomcat according to the instructions https://tomcat.apache.org/tomcat-6.0-doc/logging.html on that page. 为了控制日志记录,我根据该页面上的说明https://tomcat.apache.org/tomcat-6.0-doc/logging.html在tomcat中安装了log4j。 Here is the configuration I am using. 这是我正在使用的配置。

log4j.rootLogger = INFO, CATALINA

# 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 = stewart %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

The issue is for each error that gets logged the stack trace still gets written out to stderr. 问题是记录的每个错误都会将堆栈跟踪写入stderr。 This causes our logging platform to have log messages written to it twice. 这会导致我们的日志记录平台将日志消息写入其中两次。 What is the best way to stop all stack traces being written to stderr? 阻止所有堆栈跟踪写入stderr的最佳方法是什么?

One way to do this is to suppress the error output. 一种方法是抑制错误输出。

 System.setErr(null);

I'm using spring and I got this code to run at startup by using the PostConstruct annotation. 我正在使用spring,我使用PostConstruct注释在启动时运行此代码。

import javax.annotation.PostConstruct;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SurpressLogging {

    @PostConstruct
    public void err() {
        System.setErr(null);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM