我使用SpringBoot应用程序。每个请求都有ID。当在某些服务和程序的较低级别的地方记录错误时,我必须使用这个ID。我如何实现它呢?谢谢!
发布于 2017-12-08 14:51:17
您可以使用ThreadLocal来存储特定线程的ID。
然后,在您的服务中,您可以获得ID,删除方法ThreadLocal#get。
例如,(这只是一种方法):
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的方法。
发布于 2017-12-08 14:46:02
要在日志中添加上下文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>https://stackoverflow.com/questions/47716442
复制相似问题