2017-09-26 4 views
0

다음과 같은 콘솔 appender가 있습니다.Log4j2 logging empty ThreadContext

<Console name="STDOUT"> 
    <PatternLayout pattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg %X%n%throwable}"/> 
    <ThresholdFilter level="trace"/> 
</Console> 

문제 I 여기서 사용한 패턴이 빈 ThreadContext ({})를 출력한다는 것이다. 시스템이 매우 광범위하고 키 집합이 다양하기 때문에 특정 키 이름 (예 : %X{username})을 사용하고 싶지 않습니다. 예 출력 :

2017년 9월 26일 10 : [주] 정보 55396 :

답변

0

좋아 내부 HTTP 클라이언트를 {} 시작, 내가 ScriptPatternSelector 이용하여 내 문제를 해결 (39) . 아래 스크립트는 logEvent의 MDC가 비어 있지 않은지 확인하고 패턴이 true 인 경우 패턴을 변경합니다.

<Console name="STDOUT"> 
     <PatternLayout> 
     <ScriptPatternSelector defaultPattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg%n%throwable}"> 
       <Script name="MDCSelector" language="javascript"><![CDATA[ 
        result = null; 
        if (!logEvent.getContextData().size() == 0) { 
         result = "WithMDC"; 
        } else { 
         result = null; 
        } 
        result; 
       ]]> 
       </Script> 
      <PatternMatch key="WithMDC" pattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg %X%n%throwable}"/> 
     </ScriptPatternSelector> 
    </PatternLayout> 
    <ThresholdFilter level="trace"/> 
</Console>