我喜欢在我的应用程序中使用MDC日志记录字段,因为它使得查找所有相关日志行变得更加容易。我还发现在处理开始时清除()MDC上下文要容易得多,因为我知道应用程序的入口点在哪里但是有很多可能的异常路径,我或其他开发人员可能忘记调用MDC.clear( )。
所以我的问题是,我这样做有什么不利吗?在处理开始与结束时,总是将上下文清理为经验法则。
要清楚我是否从头开始编写代码,我会做类似的事情:
MDC.put();
try {
...
} finally {
MDC.clear();
}
但有时我必须使用基类或库中没有任何MDC相关代码的东西,因此我按照我的描述这样做,因为我不想复制基础来自库的类只是为了添加一些MDC代码行......
答案 0 :(得分:1)
建议对此保持谨慎。如果您参考应用程序的开头,则没有意义,MDC
当时没有任何内容。我猜您的引用位于请求的开头,但在这种情况下,如果您这样做,可能会有其他请求并行处理,清除MDC
会影响所有其他请求的记录。您可以在每个请求结束时调用MDC.remove()
。如果不知道您的确切应用,我可以建议这一点。
答案 1 :(得分:0)
仅在 MDC.clear和MDC.remove是: clear将删除ThreadContextMap中的所有条目(MDC保留每个线程的映射) 如果存在,则remove将仅从ThreadContextMap中删除一个键。
但是,由于您提到“来自没有任何MDC的库”
请勾选此支票:
if (MDC.getMDCAdapter() != null) MDC.clear();
and if (MDC.getMDCAdapter() != null) MDC.put();