SLF4J - 什么是悬挂或分离的标记?

时间:2014-03-30 14:34:02

标签: slf4j

在SLF4J中,我并不完全确定detached marker是什么。 JavaDoc相当模糊。

有些问题:

  • 是否纯粹是标记的内存管理,即停止/启动标记被垃圾收集?
  • 使用悬挂/分离标记记录时会发生什么?
  • 如果标记已分离,您仍可以对其进行过滤或关闭吗?
  • 为什么要在运行时分离标记?我可以理解创建自由形式的动态标记,从而节省内存(项目符号1),但稍后分离我发现奇怪。

1 个答案:

答案 0 :(得分:1)

我有同样的问题,并试图找到一些信息。

SLF4J release notes for 1.3.1中,它说

  

为响应Michael Newcomb提出的增强请求,现在可以从生成它的MarkerFactory的内部列表中分离标记。

它链接到一个我无法找到的Bugzilla bug#39。

邮件列表slf4j-user上的帖子Marker for object identification?与主题有关,但不包含请求的逐字。

我的解释是:

  • 内部列表中未引用分离的标记,可以进行垃圾回收。
  • 由于标记可以生孩子:如果您创建一个带有子B和C的分离标记A,然后重新检索具有相同名称的标记A',则无法保证A == A'和A'可能没有同样的孩子,如果你没有自己添加它们。
  • 我希望日志记录和过滤对普通标记和分离标记的行为相同,但要注意儿童的事情。
  • 主要应用程序似乎是带有动态标识符的标记。在上面的邮件列表线程中,示例是会话名称,它们总是不同的。同一会话中的不同组件将其用作标记,您可以将其放入日志模式,然后识别关联的日志消息。

顺便说一句,在log4j 2 documentation of Log4jMarkerFactory,slf4j的log4j实现中,它说的是方法getDetachedMarker()

  

出于性能原因,Log4j不支持分离标记。返回的标记已附上。

因此,分离标记仅对某些日志记录库有用。