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

Java日志框架中的标记是什么?使用它们的原因是什么?,java,logging,log4j,slf4j,logback,Java,Logging,Log4j,Slf4j,Logback,我第一次听说马克是在阅读时: 我检查了记录器对象的可用方法: 并找到了接口: 我从以下网站获得了更深入的信息: 但是我还是很困惑。。。请注意,我问的是为什么,而不是如何使用它们,因此这不是以下内容的副本: 更新似乎当您使用标记时,还需要编写自定义Java代码,而不是在XML或.property文件中进行配置 更新2自 这是对问题“”的重新解释 标记可用于为单个日志语句着色或标记。如何处理这些颜色,即标记,完全取决于您。然而,两种模式对于标记的使用似乎很常见 触发:可

我第一次听说马克是在阅读时:

我检查了记录器对象的可用方法:

并找到了接口:

我从以下网站获得了更深入的信息:

但是我还是很困惑。。。请注意,我问的是为什么,而不是如何使用它们,因此这不是以下内容的副本:

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

更新2


这是对问题“”的重新解释

标记可用于为单个日志语句着色或标记。如何处理这些颜色,即标记,完全取决于您。然而,两种模式对于标记的使用似乎很常见

  • 触发:可以指示某些附加者在存在特定标记的情况下采取行动。例如,
    SMTPAppender
    可以配置为在日志事件被标记为
    NOTIFY\u ADMIN
    标记时发送电子邮件,而不管日志级别如何。请参阅logback文档中的。您还可以将日志级别和标记结合起来进行触发

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

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


    尽管单个标记已经非常有用,但SLF4J的下一个版本,即2.0版,将允许每个日志语句使用多个标记

    要使用标记,您需要使用SLF4J提供的标记API。这就是你所说的“自定义Java代码”吗?@Ceki似乎仅仅使用Logger.warn(Marker,msg)并没有给你带来任何好处,直到你为过滤器编写自定义类并注册它们。。。logback.xml的普通语法没有处理标记的特殊能力(只需按%Marker打印它们)。在这里显示的内容中,您发现了什么“特殊”?@Ceki感谢您的观点!这是唯一一个可以使用标记的地方吗?@Ceki现在我们使用Elasticsearch,这是标记特殊事件的方法。我们将预定义的标记保存在专用类中以供重用。当你只是在文本日志上使用
    grep
    时,它并不明显。也可以用于判别
    Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
    logger.error(notifyAdmin,
      "This is a serious an error requiring the admin's attention",
       new Exception("Just testing"));