loback日志语句中的多个标记

时间:2015-12-01 17:27:32

标签: slf4j logback markers

场景:

  • 我们的日志文件由Tivoli监控。
  • 我打算标记需要由Tivoli接收的语句。所以我有标记说' TIVOLI_P1' ' TIVOLI_P2'等,P1,P2是错误优先级
  • 此外,我想分类错误,如果这些错误发生了10次,那么Tivoli将不会发出警报,直到问题得到解决。对于需要重复删除的错误,我有一个单独的标记说DEDUP。

问题:我找不到使用多个标记进行日志记录的支持。正如在Logger.log()中一样,不会采用一系列标记。什么是理想的是有一个声明用2个标记说:

TIVOLI_P1 DEDUP

我可以将它们组合成一个标记,但它们实际上意味着传达不同的东西并且是分开的。

我确信这是有充分理由的,但为什么logback / slf4j不会采用一系列标记?

2 个答案:

答案 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的新手,所以这可能不是预期的"正确的"使用标记的方法。