java - 在处理开始时而不是在结束时调用 MDC.clear() 有什么缺点吗?

标签 java logging slf4j mdc

我喜欢在我的应用程序中使用 MDC 日志记录字段,因为它使查找所有相关日志行变得更加容易。我还发现在处理开始时清除 MDC 上下文要容易得多,因为我知道应用程序的入口点在哪里,但有许多可能的异常路径,我自己或其他开发人员可能忘记调用 MDC.clear( )。

所以我的问题是,我这样做有什么缺点吗?根据经验,始终在处理开始与结束时清除上下文。

要明确的是,如果我从头开始编写代码,我会这样做:

MDC.put();
try {
...
} finally {
  MDC.clear();
}

但有时我必须使用基类或库中没有任何 MDC 相关代码的内容,因此我按照我所描述的方式进行操作,因为我不想从库中复制基类只需添加几行 MDC 代码...

最佳答案

建议对此保持谨慎。如果您指的是应用程序的开始,那么它没有任何意义,并且 MDC 当时不会有任何内容。我猜您的引用位于请求的开头,但在这种情况下,如果您这样做,可能会并行处理其他请求,并且清除 MDC 会影响所有其他请求的记录。您可以在每个请求结束时调用MDC.remove()。在不知道您的确切应用程序的情况下,这就是我所能建议的。

关于java - 在处理开始时而不是在结束时调用 MDC.clear() 有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42159379/

相关文章:

java - @ParametersAreNonnullByDefault 是否也适用于方法返回值?

java - SWT中如何计算每列占用的宽度

linux - 防止将 systemd 服务日志转发到 syslog,而不影响发送到 syslog 的其他服务日志

java - 使用 log4j 进行 reSTLet 日志记录

java - 如何在android中创建字典?

java - android DialogFragment mDialog 为空导致异常

java - 有人可以推荐一个好的 java unix syslog *client* 库吗?

grails - 用于发送不返回完整堆栈跟踪的 log4j 错误的自定义电子邮件附加程序

unit-testing - 使用 StaticLoggerBinder 对类进行单元测试

java - 不使用slf4j就不能使用log4j吗?