首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.logging.Logger不尊重java.util.logging.Level?

java.util.logging.Logger不尊重java.util.logging.Level?
EN

Stack Overflow用户
提问于 2009-01-22 19:12:27
回答 6查看 52.4K关注 0票数 55

在普通Java 6环境中:

代码语言:javascript
复制
Logger l = Logger.getLogger("nameless");
l.setLevel(Level.ALL);
l.fine("somemessage");

Eclipse控制台中没有显示任何内容。l.info("")和上面的功能很好,但是任何低于好的东西似乎都不起作用。可能出什么事了?蒂娅。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-01-22 19:30:06

即使将Logger级别设置为ALL,但ConsoleHandler (记录器上的默认处理程序)仍然具有默认的信息级别。这来自JAVA_HOME/jre/lib中的默认logging.properties

票数 59
EN

Stack Overflow用户

发布于 2009-06-11 13:55:21

与其循环遍历所有处理程序和设置日志记录级别,我更愿意只设置控制台处理程序的级别:

代码语言:javascript
复制
//get the top Logger
Logger topLogger = java.util.logging.Logger.getLogger("");

// Handler for console (reuse it if it already exists)
Handler consoleHandler = null;
//see if there is already a console handler
for (Handler handler : topLogger.getHandlers()) {
    if (handler instanceof ConsoleHandler) {
        //found the console handler
        consoleHandler = handler;
        break;
    }
}


if (consoleHandler == null) {
    //there was no console handler found, create a new one
    consoleHandler = new ConsoleHandler();
    topLogger.addHandler(consoleHandler);
}
//set the console handler to fine:
consoleHandler.setLevel(java.util.logging.Level.FINEST);
票数 36
EN

Stack Overflow用户

发布于 2009-10-22 18:52:51

在我的工作场所,一位当地人发现了以下几点工作:

代码语言:javascript
复制
public class Foo {
    private final static Logger logger = Logger.getLogger(Foo.class.getName());
    public static final void main(String[] args) {
        ConsoleHandler ch = new ConsoleHandler();
        ch.setLevel(Level.FINEST);
        Foo.logger.addHandler(ch);
        Foo.logger.setLevel(Level.FINEST);
        Foo.logger.finest("test");
    }
}

如果您只是将根或处理程序设置为最优秀(独占),那么它就无效了。当我将两者都设置为FINEST时,它就起作用了。他的解释是:

记录器及其处理程序都有日志级别…过滤的顺序是Logger,然后是处理程序。这意味着它检查日志消息是否首先传递记录器筛选器,然后将消息发送到各个处理程序进行筛选。

他还用以下例子对此作了解释:

  • Logger myLogger有一个级别的FINEST,单个ConsoleHandler myHandler具有一个级别的INFO
  • myLogger.fine("foo")à消息,使其通过记录器的过滤器,但通过处理程序的过滤器…获得阻止没有任何output.
  • myLogger.info("foo") a通过两个过滤器,foo被输出。

现在是…

  • Logger myLogger有一个级别的INFO和一个具有一个级别的FINEST
  • myLogger.fine("foo")à消息的ConsoleHandler myHandler被记录器的过滤器阻止,并且永远不会到达处理程序.没有任何output.
  • myLogger.info("foo") a通过两个过滤器,foo被输出。

现在是…

  • Logger myLogger有一个FINEST级别和一个单独的ConsoleHandler myHandler级别,其中有一个级别的FINEST需要通过两个过滤器,而"foo“则是通过两个过滤器,foo是输出的。
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/470430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档