我有一个Spring MVC应用程序,它使用SLF4J设置了日志记录。我使用两个不同的方面(使用spring-aop)进行日志记录,一个用于记录所有传入的http请求,另一个用于记录异步任务。使用ExecutorService启动异步任务。
我的理解是,当您使用ExecutorService时,衍生线程的MDC将 不 继承已设置的值。但似乎确实如此。很公平。我只是在我的子线程中调用org.slf4j.MDC.clear()来重置值。
我的问题是我在衍生子线程中设置的值 也 显示在原始 父中线程的MDC。
这是正常的,还是我做错了什么?有什么方法可以阻止这种情况吗?
答案 0 :(得分:0)
很抱歉没有发布代码。我认为我的问题更多的是一般性的“这个应该正在发生吗?”有点问题。但显然,代码总是有帮助的。
Fyi,我在SL4J下使用Log4j。
无论如何,我发现了我的问题。它与MDC没有任何关系,而且与在测试模式下,我们重写ThreadPoolTaskExecutor的execute()方法这一事实有关,所以事实上它确实 不 < / strong>开始一个新线程。我不知道。显然这是完成的,因为否则测试会有交易问题。这解释了为什么我有“数据流失”问题。
所以这是我的问题,而不是MDC。我已经确认,备份MDC的HashTable对于http请求和异步任务都是相同的实例。所以看起来我已经坚持了下来。 :(
无论如何,谢谢你的回应。