Uri*_*Uri 2 java java.util.logging
在LogManager的文档中,以下是Handlers属性的设置:
属性"处理程序".这为处理程序类定义了一个空格或逗号分隔的类名列表,以便在根Logger(名为""的Logger)上加载和注册为处理程序.
属性".handlers".这为处理程序类定义了一个以空格或逗号分隔的类名列表,以便加载和注册为指定记录程序的处理程序.每个类名必须是具有默认构造函数的Handler类.请注意,这些处理程序可能会在首次使用时延迟创建.
由于根记录器的名称是空字符串(""),因此在我看来,下面的两个子句应该是等价的:
handlers = myHandler
.handlers = myHandler
Run Code Online (Sandbox Code Playgroud)
以下是JDK的lib/logging.properties文件中的示例:
handlers= java.util.logging.ConsoleHandler
.level= INFO
Run Code Online (Sandbox Code Playgroud)
我注意到当我尝试枚举根记录器上的处理程序时,会发生奇怪的事情.我怀疑这与LogManager的实现有关,指的是其中一个属性.但是,我想尝试理解我在假设等效性方面是否正确.
澄清一下:我对此问题的目标是了解行为是否应该相同.
有两种不同方式的原因是由于J2SE 5.0中的新功能.在J2SE 1.4中,您只能使用属性向根记录器添加处理程序handlers.
根据Java 1.4 LogManager JavaDocs:
属性"处理程序".这为处理程序类定义了一个空格分隔的类名列表,以便在根Logger(名为""的Logger)上加载和注册为处理程序.每个类名必须是具有默认构造函数的Handler类.请注意,这些处理程序可能会在首次使用时延迟创建.
正如您在JavaDocs中看到的那样,您发布的文档已被修改,删除了有关lazily创建的部分.
在Java 5中,JDK-4635817:使用日志配置文件将处理程序附加到记录器是通过允许使用.handlers 因向后兼容性来修复的,LogManager必须同时支持安装处理程序的旧方法和新方法.
在大多数情况下handlers并且.handlers是等效的,除了:
handlers只会在将LogRecord发布到根记录器处理程序时加载处理程序.如果您从未记录任何内容,则从不加载处理程序..handlers将在创建根记录器期间附加处理程序.像Tomcat中使用的org.apache.juli.ClassLoaderLogManager这样的LogManager的子类应用与上面列出的规则不同的规则.
JDK 9的回归将在.handlers无法正常工作的地方得到修复.这是归档于:JDK-8191033 logging.properties中的回归:指定.handlers = for root logger(而不是handlers =)不再有效.
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |