java内置Logger无法打印info级别以下日志

package com.demon.test.testlogger;

import java.util.logging.Level;
import java.util.logging.Logger;

public class TestLevel {
    public static void main(String[] args) {
        Logger logger = Logger.getGlobal();
        logger.setLevel(Level.ALL);
        logger.log(Level.FINEST, "FINEST");
        logger.log(Level.FINER, "FINER");
        logger.log(Level.FINE, "FINE");
        logger.log(Level.CONFIG, "CONFIG");
        logger.log(Level.INFO, "INFO");
        logger.log(Level.WARNING, "WARNING");
        logger.log(Level.SEVERE, "SEVERE");
    }
}

执行以上代码,我们的预期是在控制台打印以下信息

十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
非常详细: FINEST
十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
较详细: FINER
十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
详细: FINE
十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
配置: CONFIG
十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
信息: INFO
十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
警告: WARNING
十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
严重: SEVERE

但是实际上在控制台打印结果是:

十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
信息: INFO
十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
警告: WARNING
十二月 20, 2017 3:19:48 下午 com.demon.test.testlogger.TestLevel main
严重: SEVERE

出现这种原因是因为 java.util.logging.Logger默认读取的配置文件 jre\lib\logging.properties 默认配置一个java.util.logging.ConsoleHandler,级别为INFO

#java.util.logging.ConsoleHandler.level = INFO
#java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

把这个配置注释掉之后,自定义一个 java.util.logging.ConsoleHandler,就可以在控制台里面为所欲为了。

如果不注释掉系统默认的 ConsoleHandler ,自定义一个ConsoleHandler 的时候,效果相当于有两个ConsoleHandler ,INFO级别以上的日志会在控制台打印两次。

Java内置Logger相关可以看这篇文章: Java内置Logger详解

你可能感兴趣的:(java内置Logger无法打印info级别以下日志)