繁体   English   中英

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

[英]SpringBoot: how to pass argument (request id) from controller through all program?

我使用SpringBoot应用程序。 每个请求都有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>

参见https://logback.qos.ch/manual/mdc.html

您可以使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM