Java Logging框架中的标记是什么以及使用它们的原因是什么?

第一次在阅读时听到标记:

http://slf4j.org/faq.html

我检查logging器对象的可用方法:

  • http://www.slf4j.org/api/org/slf4j/Logger.html
  • http://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Logger.html

并find接口:

  • http://www.slf4j.org/api/org/slf4j/Marker.html
  • http://logging.apache.org/log4j/2.x/log4j-api/apidocs/org/apache/logging/log4j/Marker.html

更深入的信息我从:

  • http://logback.qos.ch/manual/filters.html

但仍然困惑…请注意,我问为什么 ,而不是如何使用它们,所以这不是重复的:

  • 在SLF4J / Logback中使用标记的最佳实践

更新看来,当你使用标记,你也需要编写自定义的Java代码,而不是在XML.property文件中进行configuration…

更新2从http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN"); logger.error(notifyAdmin, "This is a serious an error requiring the admin's attention", new Exception("Just testing")); 

这是我对“ 在SLF4J / Logback中使用标记的最佳实践 ”这个问题的回答 。

可以使用标记颜色或标记单个日志语句。 你用这些颜色做什么,即标记,完全取决于你。 但是,对于标记使用来说,两种模式似乎是常见的(比第二种更普遍)。

  1. 触发 :有些appender可以被指示在某个标记的存在下采取行动。 例如, SMTPAppender可以configuration为每当使用NOTIFY_ADMIN标记logging事件时发送电子邮件,而不考虑日志级别。 在logback文档中查看基于标记的触发 。 您也可以结合日志级别和标记进行触发。

  2. 过滤 :例如,您可以用“DB”颜色标记所有持久性相关日志(在各种类和多个类文件中)。 然后可以过滤“DB”:禁用日志logging,除了标记为DB的日志语句。 有关更多信息,请参阅logback文档中有关filter的章节 (searchMarkerFilter)。

在标记出现之前,为了实现类似的行为,您可以select1)使用自定义级别2)使用修改的logging名称。 SLF4J API目前不支持自定义级别。 至于选项2,如果需要修改一个或两个logging器,则后缀(或前缀)logging器名称是可行的。 这种方法很快就变得不切实际,因为相关的configuration文件变得难以pipe理,所以需要对3个或更多的logging器进行“分类”。