2016-07-01 6 views
1

docker를 사용합니다. 우리는 도커 컨테이너에 대한 로깅 드라이버로 fluentd를 사용합니다. 우리는 Tomcat을 사용하여 Java 응용 프로그램을 제공합니다. Java 애플리케이션에서 예외가 발생하면 log4j를 사용하여 해당 예외를 처리합니다. 로깅을 제어하기 위해 해당 페이지의 https://tomcat.apache.org/tomcat-6.0-doc/logging.html 안내에 따라 tomcat에 log4j를 설치했습니다. 다음은 현재 사용중인 구성입니다.stdout 및 stderror에 tomcat 쓰기 중지

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 

문제는 표준 오류에 기록됩니다 여전히 스택 추적을 기록됩니다 각 오류입니다. 이로 인해 로깅 플랫폼에 로그 메시지가 두 번 기록됩니다. stderr에 쓰여지는 모든 스택 추적을 막는 가장 좋은 방법은 무엇입니까?

+0

"많은 오류"에 대한 몇 가지 예를 들려 줄 수 있습니까? – aksappy

+0

@ 스튜어트, log4j 설정 어딘가에 appder로 stderr가 있습니까? 필자는 구성을 제공하는 것이 유용 할 것이라고 생각합니다. 적어도 필수적인 부분은 애 퍼더와 로그입니다. –

+0

@Stewart - :), 그래서 당신의 log4j 구성이 불완전하다고 생각합니다. 그걸 보여 주시겠습니까? – aksappy

답변

0

이렇게하는 한 가지 방법은 오류 출력을 억제하는 것입니다.

System.setErr(null); 

저는 스프링을 사용하고 있으며 PostConstruct 주석을 사용하여 시작할 때이 코드를 실행합니다.

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

@Configuration 
public class SurpressLogging { 

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