Spring Boot:如何通过所有程序从控制器传递参数(请求ID)?
SpringBoot: how to pass argument (request id) from controller through all program?
我使用 Spring Boot 应用程序。每个请求都有 ID。在某些服务和程序的低级别位置记录错误时,我必须使用此 ID。我该如何实施?谢谢!
要将上下文 ID 添加到您的日志中,您可以使用 MDC:
在您的代码中:
MDC.put("first", "Dorothy");
在你的 logback.xml
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout>
<Pattern>%X{first} %X{last} - %m%n</Pattern>
</layout>
</appender>
您可以使用 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 的方法。
查看内存泄漏处理:
我使用 Spring Boot 应用程序。每个请求都有 ID。在某些服务和程序的低级别位置记录错误时,我必须使用此 ID。我该如何实施?谢谢!
要将上下文 ID 添加到您的日志中,您可以使用 MDC:
在您的代码中:
MDC.put("first", "Dorothy");
在你的 logback.xml
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout>
<Pattern>%X{first} %X{last} - %m%n</Pattern>
</layout>
</appender>
您可以使用 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 的方法。
查看内存泄漏处理: