在 SLF4J 中我不完全确定什么是分离标记 http://www.slf4j.org/apidocs/org/slf4j/IMarkerFactory.html#getDetachedMarker%28java.lang.String%29是。 JavaDoc 相当含糊。
一些问题:
- 它纯粹是标记的内存管理,即停止/启动标记被垃圾收集吗?
- 当您使用悬挂/分离的标记进行记录时会发生什么?
- 如果标记已分离,您仍然可以对其进行过滤还是已关闭?
- 为什么要在运行时分离标记?我可以理解创建自由形式的动态标记,从而节省内存(要点1),但稍后分离我发现很奇怪。
我也有同样的问题,并试图找到一些相关信息。
In the SLF4J 发行说明 http://www.slf4j.org/news.html对于 1.3.1 它说
为了响应 Michael Newcomb 提出的增强请求,现在可以将标记从生成它的 MarkerFactory 的内部列表中分离出来。
它链接到 Bugzilla bug #39,但我再也找不到了。
线程用于物体识别的标记? http://mailman.qos.ch/pipermail/slf4j-user/2007-February/000231.html邮件列表 slf4j-user 与该主题有关,但不包含逐字请求。
我的解释是这样的:
- 分离的标记不在内部列表中引用,并且可以被垃圾收集。
- 由于标记可以有子项:如果您创建一个带有子项 B 和 C 的分离标记 A,然后重新检索具有相同名称的标记 A',则不能保证 A == A' 和 A' 可能不会具有相同的子项,如果您没有自己添加它们。
- 我希望日志记录和过滤对于正常和分离的标记具有相同的行为,但要注意儿童的情况。
- 主要应用似乎是带有动态标识符的标记。在上面的邮件列表线程中,示例是会话名称,它们总是不同的。同一会话中的不同组件将其用作标记,您可以将其放入日志模式中并稍后识别关联的日志消息。
顺便说一句,在Log4jMarkerFactory 的 log4j 2 文档 https://logging.apache.org/log4j/2.0/log4j-slf4j-impl/apidocs/org/apache/logging/slf4j/Log4jMarkerFactory.html,slf4j 的 log4j 实现,它提到了 getDetachedMarker() 方法
出于性能原因,Log4j 不支持分离标记。附上返回的标记。
因此,也许分离标记仅对某些日志库有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)