当前位置: 首页 > 面试题库 >

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

颜杰
2023-03-14
问题内容

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

http://slf4j.org/faq.html

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

  • 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

并找到接口:

  • 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中使用标记的最佳实践

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 /Logback中使用标记的最佳实践
”问题的回答的重新版本。

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

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

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

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

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



 类似资料:
  • 我第一次听说记号是在看书的时候: http://slf4j.org/faq.html 我检查了Logger对象的可用方法: null null 我从以下方面获得了更深入的信息: http://logback.qos.ch/manual/filters.html 但我还是一头雾水...请注意,我问的是为什么,而不是如何使用它们,所以这不是: null

  • 在哪些情况下,应该使用? 是否只是为了合法性问题? 如果是,那么问题是什么? 因为我仍然使用开发我的所有项目

  • 问题内容: 我正在研究Swing程序中文本组件的结构。 据我了解,本质上分为视图和模型。该模型是实现的类的实例,该类包含所有文本并提供操作文本的方法,而View则以可视方式呈现文本。 但是我不知道使用an的确切位置,方式和原因。我不确定是否封装(“拥有”)模型(),或者文档是否封装了模型。而且不确定所有这些视图在哪里适合。 有两个问题: 1- 请描述视图之间的关系和在。什么封装了什么,什么与什么相

  • 问题内容: 我见过很多人声称您应该在选择查询中专门为想要的每一列命名。 假设我仍然要使用所有列,为什么我不使用? 即使考虑问题* SQL查询-从视图选择或从视图*选择col1,col2,’colN,我也不认为这是完全相同的副本,因为我正从略有不同的观点着手解决这个问题。 我们的原则之一是在优化之前就不进行优化。考虑到这一点,在被证明是资源问题或架构几乎是固定的之前,似乎应该使用 首选的 方法。众所

  • 问题内容: 当我尝试运行程序时,出现以下错误 请帮忙 问题答案: 从Javadoc: 如果Java虚拟机找不到声明为native的方法的适当本机语言定义,则抛出该异常。 这是与JNI相关的错误。loadJacobLibrary试图加载名为jacob-1.14.3-x86的本机库,但在java.library.path定义的路径上找不到该库。启动JVM时,应将此路径定义为系统属性。例如 在Windo

  • 在这里抛出RejectedExecutionException是否有其他原因? java.util.concurrent.RejectedExecutionException:任务java.util.concurrent.FutureTask@4194a5f0被java.util.concurrent.ThreadPoolExecutor@41a36e90拒绝[终止,池大小=0,活动线程=0,排队