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


110

第一次阅读时我听说标记:

http://slf4j.org/faq.html

我检查Logger对象的可用方法:

并找到接口:

我可以从以下获得更深入的信息:

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

UPDATE似乎当您使用标记时,您还需要编写自定义Java代码,而不是在XML.property文件中进行配置...

更新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提供的标记API。这就是“自定义Java代码”的意思吗?
Ceki

@Ceki似乎仅使用Logger.warn(Marker,msg)不会给您带来任何好处,直到您为过滤器编写了自定义类并注册了它们。logback.xml的纯语法没有与Marker一起使用的特殊功能(只是通过%marker打印它们)
2013年

1
logback.qos.ch/manual/appenders.html#OnMarkerEvaluator呈现的内容中找到什么“特殊”内容?
Ceki

@Ceki感谢您的观点!难道只有一个地方可以使用标记吗?
吉通科阿

1
@Ceki现在我们正在使用Elasticsearch,这是标记特殊事件的方式。我们将预定义标记保留在专用类中以供重用。当您仅使用grep文本日志时,这并不明显。
Givenkoa

Answers:


117

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

标记可用于为单个 log语句着色或标记。这些颜色(即标记)的处理完全取决于您。但是,标记使用似乎有两种模式很常见。

  1. 触发:可以指示某些附加程序在存在特定标记的情况下采取措施。例如,SMTPAppender可以配置为每当用NOTIFY_ADMIN标记标记日志事件时发送电子邮件,而与日志级别无关。请参阅注销文档中的基于标记的触发。您也可以结合日志级别和标记进行触发。

  2. 过滤:标记对于使某些有价值的日志语句脱颖而出非常有用。例如,您可以使用颜色“ DB”为所有与持久性相关的日志(在各种和多个类文件中)着色/标记。然后,您可以筛选“ DB”:禁用日志记录,但标有DB的日志语句除外。有关更多信息,请参阅登录文档中有关过滤器章节(搜索MarkerFilter)。请注意,不仅可以通过登录来执行标记过滤,还可以使用日志分析工具来执行。

在标记出现之前,要实现类似的行为,您可以选择1)使用自定义级别2)使用修改的记录器名称。SLF4J API当前不支持自定义级别。对于选项2,如果需要修改一个或两个记录器,则可以使用后缀(或前缀)记录器名称。一旦需要对3个或更多记录器进行“子分类”,该方法就变得不切实际,因为相关的配置文件变得难以管理。

即使单个标记可能已经非常有用,但SLF4J的下一版本(即2.0版)将在每个log语句中允许多个标记。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.