ITPub博客

首页 > Linux操作系统 > Linux操作系统 > JDK1.4提供的 java logger utilities使用心得--伟哥原创

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

原创 Linux操作系统 作者:davidyu720 时间:2019-06-15 19:33:05 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-18

  • 博文量
    235
  • 访问量
    179749