直到最近我还在使用 spring-boot 1.3.5.RELEASE 并且以下工作。
@SpringBootApplication
public class MyApplication {
static {
MDC.put("service_name", "myapp");
}
public static void main(String[] args) {
SpringApplication.run(new Object[]{MyConfiguration.class}, args);
}
}
注意MDC put。然后使用 logback 记录器将 service_name 记录在整个应用程序的每个日志行中。即使在子线程(例如 MVC 控制器)中也是如此。
我们现在使用的是 spring 版本 1.4.1.RELEASE 并且 service_name 的 MDC 日志现在只在主线程中工作,而不是 MVC 控制器线程。
“myapp”仍然记录在主线程中:
2016-11-30 14:22:08,147 [main] INFO co.uk.me.MyApplication - myapp [,,] - Started MyApplication in 14.276 seconds (JVM running for 308.404)
但是在控制器日志行中“myapp”现在丢失了。
2016-11-30 15:17:50,329 [http-nio-9007-exec-2] INFO co.uk.me.controller.MyController - [,,] - Received get <snip>
在更改之前它看起来像:
2016-11-30 15:17:50,329 [http-nio-9007-exec-2] INFO co.uk.me.controller.MyController - myapp [,,] - Received get <snip>
我可以在调试器中看到 MDC 上下文在控制器方法开始时为空。
有谁知道什么变化影响了这种行为?也许对 Spring MVC 线程创建进行了更改?还是 logback 更改?有没有办法在 spring-boot 中设置和保持应用程序范围的 MDC 属性?
谢谢