【问题标题】:Why LogbackMDC keep track of last operation?为什么 LogbackMDC 会跟踪上次操作?
【发布时间】:2021-06-07 17:00:48
【问题描述】:

我正在查看LogbackMDCAdapter 的实现,它跟踪lastOperation 我不明白这样做的原因,有人知道为什么这样做吗?

还有,为什么需要duplicateAndInsertNewMap

【问题讨论】:

    标签: java logback thread-local mdc


    【解决方案1】:

    根据here 的评论,为了序列化目的需要复制地图

    每次添加一个值时,都会创建一个新的地图实例。这 是确定序列化过程将在 更新地图并且不发送对旧地图的引用,因此不允许 远程 logback 组件以查看最新更改。

    这是指ObjectOutputStream 发送对先前写入对象而不是完整对象的引用的行为,除非使用writeUnshared 方法。

    除非有get/put 组合,否则为什么可以跳过复制并不是很明显,但显然即使您连续有多个put 操作,只要仅复制映射,序列化就会正常工作当put/removeget 之后执行时。所以这是一个performance optimization,以避免在将多个项目放入其中时不必要地复制地图。

    【讨论】:

      猜你喜欢
      • 2021-08-20
      • 2013-02-09
      • 2017-02-11
      • 2015-09-20
      • 2012-12-23
      • 1970-01-01
      • 2020-11-21
      • 2011-06-21
      • 2014-05-16
      相关资源
      最近更新 更多