场景:
问题:我找不到使用多个标记进行日志记录的支持。正如在Logger.log()中一样,不会采用一系列标记。什么是理想的是有一个声明用2个标记说:
TIVOLI_P1 DEDUP
我可以将它们组合成一个标记,但它们实际上意味着传达不同的东西并且是分开的。
我确信这是有充分理由的,但为什么logback / slf4j不会采用一系列标记?
答案 0 :(得分:2)
对于SLF4J,以下方法可能有用:
Marker dupMarker = MarkerFactory.getDetachedMarker("TIVOLI_P1");
dupMarker.add(MarkerFactory.getMarker("DEDUP"));
LOGGER.error(dupMarker, "A log message");
如果您检查 org.slf4j.MarkerFactory ,则有2个静态方法返回 Marker 对象为: getMarker(String name)和 getDetachedMarker(字符串名称)。
根据 org.slf4j.helpers.BasicMarkerFactory 实现,主要区别是 getMarker 使用缓存策略,而 getDetachedMarker 始终返回新实例。
在基线上,您需要使用这种分离的标记方法,否则,一旦将“ DEDUP”标记添加到“ TIVOLI_P1”标记中,它们将始终挂在一起,除非您通过 detachMarker 分离“ DEDUP”匹配器>方法。但是,如果您在多线程环境中,这将不是一个好方法。
如果您担心此两步操作的创建成本,则可以引入一个包含此类复杂标记实例的缓存。
答案 1 :(得分:0)
我认为您可以创建一个不执行任何操作的根标记,并使用Marker.add
将实际标记列表包含为子项。
注意:我是SLF4J的新手,所以这可能不是预期的"正确的"使用标记的方法。