2017-12-12 4 views
1

내 로그가 추출되고 파이프되며 elasticsearch에 통합됩니다. 다중 행 이벤트는 추적 및 진단하기가 어렵습니다.한 줄에 예외가 생기는 로그백 구성입니까?

단일 레코드에서 예외 행을 그룹화하기 위해 콜렉터 및 일반 표현식을 사용하는 대신 에 Exception 스택 추적을 한 행에 포함시키는 방법이 있습니까?

답변

3

당신은 %ex 상징적과 같이 대한 logback.xml의 변환 규칙을 선언 할 수

<?xml version="1.0" encoding="UTF-8" ?> 
<configuration> 
    <conversionRule conversionWord="ex" converterClass="com.foo.CompressedStackTraceConverter" /> 

    ... 

</configuration> 

다음과 같이 CompressedStackTraceConverter을 선언

import ch.qos.logback.classic.pattern.ThrowableProxyConverter; 
import ch.qos.logback.classic.spi.IThrowableProxy; 

public class CompressedStackTraceConverter extends ThrowableProxyConverter { 
    @Override 
    protected String throwableProxyToString(IThrowableProxy tp) { 
     String original = super.throwableProxyToString(tp); 

     // replace the new line characters with something, 
     // use your own replacement value here 
     return original.replaceAll("\n", " ~~ "); 
    } 
} 

custom conversion specifier가 로깅 패턴으로 오래 작동합니다 %ex 기호가 들어 있습니다. 예를 들어,이 같은 패턴은 : 당신의 패턴이 하지 않습니다

<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
    <pattern>%d{yyyy-MM-dd HH:mm:ss}|%-5level|%logger{36}|%msg %ex %n</pattern> 
</encoder> 

경우%ex 상징적 다음 스택 트레이스가 ...

이 같은 변환 규칙을 선언 할 경우에 %msg의 일부 포함
<conversionRule conversionWord="msg" converterClass="com.foo.CompressedStackTraceConverter" /> 

... 이것은 스택 추적 부분뿐만 아니라 전체 로그 메시지에 CompressedStackTraceConverter을 적용하면 효과가 있습니다.