为什么 LogbackMDC 会跟踪上次操作?
Why LogbackMDC keep track of last operation?
我正在查看 LogbackMDCAdapter 的实现,它跟踪 lastOperation
我不明白这样做的原因,有人知道为什么这样做吗?
而且,为什么需要 duplicateAndInsertNewMap
?
根据评论here,出于序列化目的需要复制地图
Each time a value is added, a new instance of the map is created. This
is to be certain that the serialization process will operate on the
updated map and not send a reference to the old map, thus not allowing
the remote logback component to see the latest changes.
这指的是 ObjectOutputStream
发送对先前写入的对象而不是完整对象的引用的行为,除非使用 writeUnshared 方法。
除非有 get/put
组合,否则为什么可以跳过复制不是很明显,但显然即使你连续有多个 put
操作,序列化也会正常工作只要因为只有在 get
之后立即执行 put/remove
时才会复制地图。所以这是一个 performance optimization 来避免在放置多个项目时不必要地复制地图。
我正在查看 LogbackMDCAdapter 的实现,它跟踪 lastOperation
我不明白这样做的原因,有人知道为什么这样做吗?
而且,为什么需要 duplicateAndInsertNewMap
?
根据评论here,出于序列化目的需要复制地图
Each time a value is added, a new instance of the map is created. This is to be certain that the serialization process will operate on the updated map and not send a reference to the old map, thus not allowing the remote logback component to see the latest changes.
这指的是 ObjectOutputStream
发送对先前写入的对象而不是完整对象的引用的行为,除非使用 writeUnshared 方法。
除非有 get/put
组合,否则为什么可以跳过复制不是很明显,但显然即使你连续有多个 put
操作,序列化也会正常工作只要因为只有在 get
之后立即执行 put/remove
时才会复制地图。所以这是一个 performance optimization 来避免在放置多个项目时不必要地复制地图。