状态的JavaDocsjava.util.logging.Level:
java.util.logging.Level
级别降序为:
SEVERE
WARNING
INFO
CONFIG
FINE
FINER
FINEST
import java.util.logging.*; class LoggingLevelsBlunder { public static void main(String[] args) { Logger logger = Logger.getAnonymousLogger(); logger.setLevel(Level.FINER); System.out.println("Logging level is: " + logger.getLevel()); for (int ii=0; ii<3; ii++) { logger.log(Level.FINE, ii + " " + (ii*ii)); logger.log(Level.INFO, ii + " " + (ii*ii)); } } }
Logging level is: FINER Jun 11, 2011 9:39:23 PM LoggingLevelsBlunder main INFO: 0 0 Jun 11, 2011 9:39:24 PM LoggingLevelsBlunder main INFO: 1 1 Jun 11, 2011 9:39:24 PM LoggingLevelsBlunder main INFO: 2 4 Press any key to continue . . .
我的示例将设置Level为FINER,因此我希望每个循环看到2条消息。相反,我为每个循环看到一条消息(Level.FINE消息丢失)。
Level
Level.FINE
为了查看FINE(FINER或FINEST)输出,需要进行哪些更改?
感谢Vineet Reynolds的回答,该版本可以按照我的期望工作。它显示3条INFO消息和3条FINE消息。
import java.util.logging.*; class LoggingLevelsBlunder { public static void main(String[] args) { Logger logger = Logger.getAnonymousLogger(); // LOG this level to the log logger.setLevel(Level.FINER); ConsoleHandler handler = new ConsoleHandler(); // PUBLISH this level handler.setLevel(Level.FINER); logger.addHandler(handler); System.out.println("Logging level is: " + logger.getLevel()); for (int ii=0; ii<3; ii++) { logger.log(Level.FINE, ii + " " + (ii*ii)); logger.log(Level.INFO, ii + " " + (ii*ii)); } } }
记录器仅记录消息,即它们创建日志记录(或记录请求)。它们不会将消息发布到目的地,这由处理程序负责。设置记录器的级别只会导致它 _创建_与该级别或更高级别匹配的日志记录。
您可能正在使用ConsoleHandler(我无法推断您的输出是System.err还是文件,但是我认为它是前者),默认情况下,该级别将发布该级别的日志记录Level.INFO。您将必须配置此处理程序,以发布级别Level.FINER和更高级别的日志记录,以获得所需的结果。
ConsoleHandler
Level.INFO
Level.FINER
我建议阅读《Java日志记录概述》指南,以了解基础设计。该指南涵盖了Logger和Handler概念之间的区别。
编辑处理程序级别
1.使用配置文件
所述的java.util.logging属性文件(默认情况下,这是logging.properties在文件JRE_HOME/lib)可以被修改,以改变ConsoleHandler的缺省级别:
logging.properties
JRE_HOME/lib
java.util.logging.ConsoleHandler.level = FINER
2.在运行时创建处理程序
不建议这样做,因为这会导致覆盖全局配置。在您的整个代码库中使用此命令将导致记录器配置可能无法管理。
Handler consoleHandler = new ConsoleHandler(); consoleHandler.setLevel(Level.FINER); Logger.getAnonymousLogger().addHandler(consoleHandler);