为什么我的MDC SLF4J中有两个请求的重复ID?

时间:2015-07-21 04:20:52

标签: java web slf4j mdc

我有一个网络应用程序。我的应用程序由Tomcat部署。我写了一个Servlet Filter,用于在MDC上的SLF4J课程中输入一些数据,代码如下:

MDC.put("Id", UUID.randomUUID().toString();

当我运行第二次或第三次请求的应用程序时,我得到重复的UUID。这种情况是串行的,并不是并发的。我认为存在一个线程池,线程上下文不清楚。

1 个答案:

答案 0 :(得分:2)

使用此结构可以保证删除ID:

try {
    MDC.put("Id", UUID.randomUUID().toString());

    // The rest of your code
} finally {
    MDC.remove("Id");
}

(不需要捕获块)。这将保证为此事务删除Id密钥。

此外,当然Tomcat使用线程池,这是它们在并发时管理请求的方式。进一步阅读:https://tomcat.apache.org/tomcat-6.0-doc/config/executor.html