2017-12-08 2 views
0

저는 SpringBoot 앱을 사용합니다. 모든 요청에는 ID가 있습니다. 그리고 일부 서비스 및 더 낮은 수준의 프로그램에서 오류를 기록 할 때이 ID를 사용해야합니다. 어떻게 구현할 수 있습니까? 고맙습니다! 코드에서SpringBoot : 컨트롤러에서 모든 프로그램을 통해 인수 (요청 ID)를 전달하는 방법?

: 당신이 MDC를 사용할 수있는 로그에 컨텍스트 ID를 추가

+0

당신이'사용할 수 있습니다 @ RequestParam' 또는'@ Pathvariable' –

답변

0

ThreadLocal을 사용하여 특정 스레드에 대한 ID를 저장할 수 있습니다.

그런 다음 서비스에서 ThreadLocal#get 방법을 통해 해당 ID를 얻을 수 있습니다. 예를 들어

(이것은 단순한 접근법)

class AppProvider { 
    public static final ThreadLocal<String> APP_CONTEXT = new ThreadLocal<String>(); 
} 

class Controller { 
    public void users(@RequestParam String id) { 
     AppProvider.APP_CONTEXT.set(id); 
     ....... 
    } 
} 

class Service { 
    try { 
    } catch (Exception e) { 
     log.error(String.format("Id: %s", AppProvider.APP_CONTEXT.get())); 
    } 
} 

이것의 ThreadLocal을 사용하여 단순한 방식이다.

이 메모리 누수 처리에 대한이 봐 :https://stackoverflow.com/a/17975255/1715121

0

당신의 logback.xml에

MDC.put("first", "Dorothy"); 

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> 
    <layout> 
    <Pattern>%X{first} %X{last} - %m%n</Pattern> 
    </layout> 
</appender> 

참조 https://logback.qos.ch/manual/mdc.html

관련 문제