【问题标题】:What's the purpose of named hierarchical loggers?命名分层记录器的目的是什么?
【发布时间】:2020-05-29 12:45:28
【问题描述】:

根据这个例子http://tutorials.jenkov.com/java-logging/logger-hierarchy.html

我们有三个记录器“com”、“com.jenkov”和“com.jenkov.web”。为什么这些必须在层次结构中,汇总消息有什么好处?

【问题讨论】:

    标签: logging log4j java.util.logging


    【解决方案1】:

    为什么这些必须在层次结构中......?

    继承。每Java™ Logging Overview - 1.3 Loggers

    特别是,记录器可以继承:

    日志记录级别。如果 Logger 的级别设置为 null,则 Logger 将使用一个有效的级别,该级别将通过向上遍历父树并使用第一个非 null 级别来获得。 处理程序。默认情况下,Logger 会将任何输出消息记录到其父处理程序,依此类推,以递归方式向上。 资源包名称。如果 logger 的资源包名称为空,那么它将继承为其父级定义的任何资源包名称,依此类推。

    在 Java 中使用包减速,它允许您监听、关闭或筛选类、包甚至组织 3rd 方库的日志记录。这也意味着您不必编写包含数百个记录器名称的配置文件来禁用所有记录。设置根会在一行中为您调整所有子级。由于您有一个树结构,您可以将该逻辑递归地应用于子记录器以禁用特定库或逻辑程序模块。

    在教程中有解释:

    Logger.getLogger("com.jenkov.web") 只有一个父级,即根记录器。看起来像这样:"" <- "com.jenkov.web"

    不过,Logger logger = Logger.getLogger(""); Logger logger1 = Logger.getLogger("com"); Logger logger2 = Logger.getLogger("com.jenkov"); Logger logger3 = Logger.getLogger("com.jenkov.web");

    强制 LogManager 创建一个不同的层次结构,如下所示: "" <- "com." <- "com.jenkov." <- "com.jenkov.web"

    在 log4j 中不需要添加这样的代码,但如果您想 modify the hierarchy so you can control it at runtime,则在 JUL 中需要。如果你需要这个技巧,也可以loggers should be pinned in memory to avoid garbage collection

    ...汇总消息有什么好处?

    我假设您的意思是向父记录器发送消息???它使配置能够将日志记录筛选到特定的处理程序中并共享通用的处理程序设置。例如,在开发环境配置中,您可能希望通过附加到根目录将所有输出发送到控制台,然后只发送到特定包的 FileHandler。记录器树的优点是您不必将第二个 ConsoleHandler 附加到特定包以查看控制台输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多