2016-07-20 3 views
0

log4j syslog appender를 사용하고 있는데 예외가 발생하면 appender는 스택 추적의 모든 항목을 새로운 행으로 씁니다.log4j syslog appender가 스택 추적을 한 줄로 작성하는 방법은 무엇입니까?

전체 스택 추적이 여러 줄 대신 한 줄로 구성되도록 구성하는 방법이 있습니까?

+0

실제로 stacktrace 쓰기를 수행하는 log4j라고는 믿을 수 없으므로이 작업을 수행 할 수 있는지 확신 할 수 없습니다. 문자열로 쓰고 캐리지 리턴을 제거 할 수 있습니다. – CodeChimp

+0

패턴 레이아웃은 어떻게됩니까? – Joly

+0

@davidhxx는 질문에 대한 답을 찾았지만, Log4J 및 모든 로깅 유틸리티는 단순히 Throwable.printStackTrace()를 사용하여 스택 추적을 출력한다는 인상을 받았다. 쉽게 서식을 변경할 수 없습니다. 그러나 Log4J는 아래의 해답에 따라 처리 할 수있는 일종의 처리 기능을 가지고있는 것으로 보입니다.이 함수는 오버라이드 된 printStackTrace() 호출 중 하나를 사용하여 값을 스트림/기록기에 쓰도록 할 수 있습니다. 그것을 바꿔라. – CodeChimp

답변

1

스택 트레이스의 렌더러를 사용자 정의 할 수 있습니다. Log4J (org.apache.log4j.spi.ThrowableRenderer 인터페이스)에는 ThrowableRenderer 두 가지가 있습니다. 기본적으로 하나가 사용됩니다. 그래서 원하는 형식으로 자신의 ThrowableRenderer를 구현 한 다음 구성에 설정하십시오.

Log4j 1에서는 작동합니다. Log42에서 절대로 시도하지 마십시오. https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html

ThrowableRenderer 당신은의 Throwable의 인스턴스가 기록되기 전에 문자열 로 변환되는 방식을 사용자 정의 할 수 있습니다. ThrowableRenderer를 지정하면 (자) 완료됩니다. 구문 : log4j.throwableRenderer = fully.qualified.name.of.rendering.class log4j.throwableRenderer.paramName = paramValue , 마찬가지로 log4j.throwableRenderer = org.apache.log4j.EnhancedThrowableRenderer

+0

고마워, JBOSS 퓨즈 내부에서 이것을 사용하고 있음을 잊어 버렸습니다. 코드를 현명하게 할 수있는 것에 매우 제한되어 Log4J 속성 만 변경할 수 있습니다. 이미 사용할 수있는 렌더러가 있습니까? – Joly

+0

자신 만의 렌더링 클래스를 생성하고 JBoss의 classpath 장소 (예 : lib 디렉토리)에 넣을 수없는 이유가 없습니다. JBoss에는 common/lib 디렉토리가 있습니다. 제이 보스 퓨즈는 그렇지 않아? 두 개의 렌더러가 있지만 원하는대로 만들지는 못합니다. DefaultThrowableRenderer 및 EnhancedThrowableRenderer입니다. – davidxxx

0

예외를 로거에 전달하는 대신 (예 : log.error(e)) 먼저 스택 추적을 문자열로 변환하고 문자열을 기록하십시오.

가장 많이 상향 된 답변 to this question에는 스택 추적을 문자열로 변환하는 몇 가지 쉬운 방법이 있습니다.

+0

일반적인 로그 방법이 아닙니다. log.error (e)를 수행하고 고전적인 공유 방법을 호출하는 것을 잊을 수 있습니다. 일반적인 공유 된 우수 사례는 소프트웨어 개발에서 중요합니다. – davidxxx

관련 문제