在 LogManager 的文档中,以下是 Handlers 属性的设置:
由于根记录器的名称是空字符串 (""),在我看来,下面的两个子句应该是等效的:
handlers = myHandler
.handlers = myHandler
这是 JDK 的 lib/logging.properties 文件中的一个示例:handlers= java.util.logging.ConsoleHandler
.level= INFO
我注意到当我尝试枚举根记录器上的处理程序时发生了奇怪的事情。我怀疑这与引用这些属性之一的 LogManager 的实现有关。但是,我想尝试了解我的等效假设是否正确。澄清:我对这个问题的目标是了解行为是否应该相同。
最佳答案
有两种不同方式的原因是 New Features in J2SE 5.0 。在 J2SE 1.4 中,您只能使用 handlers
属性来设置 add handlers to the root logger。
根据 Java 1.4 LogManager JavaDocs:
正如您从 JavaDocs 中看到的,您发布的文档已被修改,删除了关于创建延迟的部分。
在 Java 5 中,通过允许使用 .handlers
修复了 JDK-4635817 : Attaching handlers to loggers using logging config file 由于向后兼容性,LogManager 必须同时支持安装处理程序的新旧方法。
在大多数情况下,handlers
和 .handlers
是等效的,除了:
handlers
只会在 LogRecord 发布到根记录器处理程序时加载您的处理程序。如果您从不记录任何内容,则永远不会加载处理程序。 .handlers
将在创建根记录器期间附加您的处理程序。 LogManager 的子类,如 Tomcat org.apache.juli.ClassLoaderLogManager 中使用的 apply different rules from what is listed above 。
JDK 9 有一个回归,将在
.handlers
无法正常工作的情况下修复。这是归档在: JDK-8191033 Regression in logging.properties: specifying .handlers= for root logger (instead of handlers=) no longer works 。关于java - 在 java.util.logging logging.properties 文件中, "handlers"和 ".handlers"有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36726431/