首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SpringBoot:如何通过所有程序从控制器传递参数(请求id)?

SpringBoot:如何通过所有程序从控制器传递参数(请求id)?
EN

Stack Overflow用户
提问于 2017-12-08 14:34:56
回答 2查看 1.3K关注 0票数 0

我使用SpringBoot应用程序。每个请求都有ID。当在某些服务和程序的较低级别的地方记录错误时,我必须使用这个ID。我如何实现它呢?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-08 14:51:17

您可以使用ThreadLocal来存储特定线程的ID。

然后,在您的服务中,您可以获得ID,删除方法ThreadLocal#get

例如,(这只是一种方法):

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2017-12-08 14:46:02

要在日志中添加上下文id,可以使用MDC:

在您的代码中:

代码语言:javascript
运行
复制
 MDC.put("first", "Dorothy");

在你的logback.xml里

代码语言:javascript
运行
复制
<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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47716442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档