命名分层记录器的作用是什么?

问题描述 投票:0回答:1

根据这个例子 http:/tutorials.jenkov.comjava-logginglogger-hierarchy.html。

我们有三个记录器 "com","com.jenkov "和 "com.jenkov.web"。为什么这三个记录器要分等级,把消息滚动起来有什么好处?

logging log4j java.util.logging
1个回答
0
投票

为什么这些都要分等级?

继承。 继承。Java™日志概述 - 1.3 记录器:

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

记录仪的级别。如果记录仪的级别设置为空,那么记录仪将使用有效级别,该级别将通过沿父树向上走并使用第一个非空级别获得。 处理程序。默认情况下,记录仪将把任何输出消息记录到其父树的处理程序中,并以此类推在树上递归。 资源捆绑名称:如果一个记录仪的资源捆绑名称为空,那么该记录仪就会将任何输出消息记录到其父级处理程序中,并以递归方式向上记录。如果记录仪的资源束名称为空,那么它将继承为其父级定义的任何资源束名称,并以此类推递归上树。

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

在教程中会有解释。

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中是不需要的 但在JUL中是需要的,如果你想的话 修改层次结构,以便您可以在运行时控制它。. 还 记录器应该被固定在内存中,以避免垃圾收集。 如果你需要做这个技巧.

...滚动消息有什么好处?

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

© www.soinside.com 2019 - 2024. All rights reserved.