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详解