当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《java.util.logging.Logger不尊重java.util.logging.Level?》经验,为你挑选了3个好方法。

在普通的Java SE 6环境中:

Logger l = Logger.getLogger("nameless");
l.setLevel(Level.ALL);
l.fine("somemessage");

Eclipse控制台中没有显示任何内容.l.info("")及以上版本工作正常,但任何低于罚款的东西似乎都不起作用.什么可能是错的?TIA.



1> Kevin..:

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


+1将此项添加到项目的记录器设置中以覆盖ConsoleHandler默认值:`java.util.logging.ConsoleHandler.level = FINE`

2> michel.iamit..:

我宁愿只设置控制台处理程序的级别,而不是遍历所有处理程序并设置日志记录级别:

//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);


Thanx,但我同意真正的答案是设置日志记录级别,就像上面的答案一样.此解决方案更像是一种解决方法.我不明白为什么你不能在Eclise的控制台设置中设置日志记录级别.我曾经和JBuilder合作过,这是一个选择.
..hi 2009,这是2012年的召唤.对于现在必须使用像这个例子(我们认为当时是个好主意)的库/ jar的人来说,你可以通过添加jul-to-slf4j bridge继续使用新的,首选的slf4j + logback配置(jul-to-slf4j.jar)到类路径,像这样的代码*可能*工作.经验教训:将所有低级日志操作保留在代码之外,并在配置文件中配置日志记录级别(在本例中为-Djava.util.logging.config.file = {file},其中{file}是自定义的适当设置".level"的logging.properties版本.

3> jwmajors81..:

在我的工作场所的个人发现以下工作:

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");
    }
}

如果你只是将root或处理程序设置为最好(仅限于)那么它就不起作用了.当我把两者都设置为FINEST然后它就可以了.他的解释是:

记录器及其处理程序都有日志级别...过滤的顺序是Logger然后是Handlers.这意味着它会检查日志消息是否首先通过记录器过滤器,然后将消息发送给各个处理程序进行过滤.

他使用以下示例进一步解释了它:

Logger myLogger有一个水平FINESTConsoleHandler myHandler一个水平的INFO

myLogger.fine("foo") àmess消息使它通过记录器的过滤器,但是由处理程序的过滤器获取停止...没有输出.

myLogger.info("foo")à传递两个过滤器并foo输出.

现在…

Logger myLogger有一个水平INFOConsoleHandler myHandler一个水平的FINEST

myLogger.fine("foo") à消息被记录器的过滤器停止,永远不会进入处理程序......没有输出.

myLogger.info("foo")à传递两个过滤器并foo输出.

现在…

Logger myLogger有一个水平FINESTConsoleHandler myHandler一个水平的FINEST

myLogger.fine("foo")à传递两个过滤器,foo输出" ".

myLogger.info("foo")à传递两个过滤器并foo输出.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有