如果我不从MDC中删除上下文数据怎么办?

时间:2017-01-11 13:25:34

标签: java logging slf4j mdc

我知道,MDC是一个映射,它存储运行上下文的特定线程的上下文数据。我正在运行我希望每个日志语句应该打印某些数据的情况,这些数据不限于任何特定线程,而是特定于例如的应用程序。我的应用程序运行的当前节点名称。所以我在MDC中添加了节点名称

  

MDC.put("源",SOURCE_NAME);

由于它是特定于应用程序的,我不想将其从MDC中删除(如果我的应用程序由于某种原因而中断,如果我没有错误,将以任何方式清除MDC。)

只是想知道,如果我不从MDC删除密钥以及它将如何影响我的应用程序会发生什么?是否会有任何内存泄漏或其他任何内容?

1 个答案:

答案 0 :(得分:1)

除了日志中存在一些不正确的MDC文本外没有任何影响。例如,MDC被添加到thread1,然后使用thread1注销的任何日志都将具有MDC文本(当然它还将依赖于logback配置)。

如果我不得不说,由于MDC数据存储在ThreadLocal中,因此会对性能产生轻微影响。正如您所提到的,ThreadLocal就像使用线程作为键的Map。记录时会有类似get的操作。

并且它不太可能有内存泄漏,因为在你的情况下,只有非常有限的数据放入MDC并且数据只是字符串(我假设source_name是字符串)。

是的。如果应用程序以某种方式关闭,线程消失,没有ThreadLocal,也没有MDC。

希望这有帮助。