Java日志记录似乎不适用于FINE / FINER / FINEST级别

时间:2015-08-05 16:17:33

标签: java logging

我正在使用java.util.logging在不同级别执行日志记录。我的问题是我无法获得级别FINE / FINER / FINEST来显示任何输出。我见过一个类似的线程(Why are the Level.FINE logging messages not showing?)但似乎并没有解决我的问题。我有以下主要课程:

package logtest;

import java.util.logging.Logger;

public class Main {


    private static final Logger LOGGER = Logger.getLogger(Main.class.getName());

    public static void main(String[] args) {
        LOGGER.info("info");
        LOGGER.severe("severe");
        LOGGER.fine("fine");
    }

}

在我的项目根目录中的文件src/logtest/Main.java和文件logging.properties中:

.handlers = java.util.logging.ConsoleHandler

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

我执行生成的二进制文件(在bin/logtest中),如下所示:

java -Djava.util.logging.config.file=logging.properties -classpath bin logtest.Main

我得到了这个结果(注意到FINE消息丢失了):

Aug 05, 2015 6:13:04 PM logtest.Main main
INFO: info
Aug 05, 2015 6:13:04 PM logtest.Main main
SEVERE: severe

有趣的是,如果我将条目java.util.logging.ConsoleHandler.level更改为SEVERE,则第一条消息会消失:

Aug 05, 2015 6:14:09 PM logtest.Main main
SEVERE: severe

所以我知道文件被正确读取和解释。但我无法将FINE日志消息显示在控制台上(使用openjdk-8顺便说一句)。关于为什么的任何想法?

1 个答案:

答案 0 :(得分:2)

您已更改处理程序的级别,但未更改记录器。你需要做两件事。

您可以在代码中执行此操作:

LOGGER.setLevel(Level.FINE);

或者,您可以从属性文件中读取设置。要修改默认日志记录级别,您可以添加:

.level=FINE

您可以通过添加

等行来指定自己的记录器的日志记录级别
com.mycompany.myapp.level=FINE