2016-11-30 2 views
0

최근까지는 스프링 부트 1.3.5.RELEASE를 사용하고 있었지만 다음은 작동했습니다. 봄 부팅 MDC 상속 동작이 변경 되었습니까?

@SpringBootApplication 
public class MyApplication { 
    static { 
     MDC.put("service_name", "myapp"); 
    } 
    public static void main(String[] args) { 
     SpringApplication.run(new Object[]{MyConfiguration.class}, args); 
    } 
} 

MDC를 넣습니다. service_name은 logback logger를 사용하여 전체 응용 프로그램의 각 로그 행에 기록되었습니다. 이것은 자식 스레드에서도 마찬가지입니다. MVC 컨트롤러.

이제 spring 버전 1.4.1.RELEASE가되었으며 service_name의 MDC 로깅은 MVC 컨트롤러 스레드가 아닌 주 스레드에서만 작동합니다.

는 "myapp와는"여전히 메인 스레드에 기록됩니다

2016-11-30 14:22:08,147 [main] INFO co.uk.me.MyApplication - myapp [,,] - Started MyApplication in 14.276 seconds (JVM running for 308.404) 

그러나 컨트롤러 로그 라인 "MyApp를"에서

지금이 없습니다. 나는 MDC 컨텍스트는 컨트롤러 메소드의 시작에 비어있는 디버거에서 볼 수

2016-11-30 15:17:50,329 [http-nio-9007-exec-2] INFO co.uk.me.controller.MyController - myapp [,,] - Received get <snip> 

: 같은

2016-11-30 15:17:50,329 [http-nio-9007-exec-2] INFO co.uk.me.controller.MyController - [,,] - Received get <snip> 

는 변경하기 전에 그것을 보았다.

누구든지이 동작에 어떤 영향을 주 었는지 알고 있습니까? 스프링 MVC 스레드 생성에 대한 변경일까요? 또는 로그백 변경? 봄 부팅시 응용 프로그램 전체 MDC 속성을 설정하고 유지하는 방법이 있습니까?

감사

답변

0

MDC의 값은 스레드 지역 주민에 보관되어, 당신의 봄 부트 앱이 값을 가지고 시작 그래서 오직 주 스레드. MDC는 일반적으로 정적 컨텐츠가 아닌 동적 컨텐츠에 사용됩니다 (어플리케이션 이름은 변경되지 않습니다). 들어오는 요청마다 MDC 값을 채우는 필터를 추가 할 수 있습니다.

 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
      <Pattern>%date [myapp] [%thread] %-5level %logger{36} - %msg%xEx%n</Pattern> 
     </encoder> 
:

난 당신에 logback-spring.xml 파일을 같은 것을 사용하는 것이 좋습니다