저는 SpringBoot 앱을 사용합니다. 모든 요청에는 ID가 있습니다. 그리고 일부 서비스 및 더 낮은 수준의 프로그램에서 오류를 기록 할 때이 ID를 사용해야합니다. 어떻게 구현할 수 있습니까? 고맙습니다! 코드에서SpringBoot : 컨트롤러에서 모든 프로그램을 통해 인수 (요청 ID)를 전달하는 방법?
: 당신이 MDC를 사용할 수있는 로그에 컨텍스트 ID를 추가
저는 SpringBoot 앱을 사용합니다. 모든 요청에는 ID가 있습니다. 그리고 일부 서비스 및 더 낮은 수준의 프로그램에서 오류를 기록 할 때이 ID를 사용해야합니다. 어떻게 구현할 수 있습니까? 고맙습니다! 코드에서SpringBoot : 컨트롤러에서 모든 프로그램을 통해 인수 (요청 ID)를 전달하는 방법?
: 당신이 MDC를 사용할 수있는 로그에 컨텍스트 ID를 추가
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
당신의 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>
당신이'사용할 수 있습니다 @ RequestParam' 또는'@ Pathvariable' –