JDK1.4提供的 java logger utilities使用心得--伟哥原创

JDK1.4提供的 java logger utilities有两个重要的类:

java.util.logging.Logger
java.util.logging.Handler

几个问题:

1)缺省配置文件 liblogging.properties
2)关于 level 配置项
3)关于动态 setLevel


1)缺省配置文件 lib/logging.properties
在这个文件里的配置项,并不是 system properties!只是用于 Logger 的properties配置项。
因此:
1)不能用System.getProperty()得到logging.properties里面的配置的;
2)在java命令行上不能指定logger的level等参数,如 java -Djava.util.logging.ConsoleHandler.level=ALL
例外:可以指定logger配置文件,如 java -Djava.util.logging.config.file=myfile

2)关于 level 配置项
OFF
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
ALL
测试说明:使用 ConsoleHandler
测试结论:
必须同时设置以下两个配置项为相同的值,第一个代表的是 Logger 对象,第二个代表的是 ConsoleHandler 对象。
.level=xxx
java.util.logging.ConsoleHandler.level=xxx
例如:
只设置后面的为 ALL, 前面依然为 INFO,最终的结果也只能输出到 INFO 级别。
原因:
Logger 首先会检查自己的 loglevel,如果通过,则会提交给 ConsoleHandler;
ConsoleHandler 会检查自己的 loglevel,如果通过,则会真正记录日志。

3)关于动态 setLevel
Logger 首先会 Post the LogRecord to all our Handlers, and then to our parents' handlers, all the way up the tree.
通过Logger.getLogger("name")得到的 Logger,其 handler 属性为空;因此只有通过其 Parent 才能形成有效输出。
其parent是 java.util.logging.LogManager$RootLogger 对象,这个对象的 handlers 非空,一般是 java.util.logging.ConsoleHandler 对象。
因此,在程序中动态设置日志级别 setLevel 的方法是:
首先设置 Logger 自己的 level,并设置 handlers 的 level, if any;
然后设置 Logger's parent 的 level 及其 handlers 的level;
如此循环,直至 top level。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9844649/viewspace-580178/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9844649/viewspace-580178/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值