我在使用 java.util.logging 的东西时遇到了问题……我无法记录精细、更精细和最精细的级别。
我在这里找到了理想的解决方案: 为什么没有显示 Level.FINE 日志消息?
我创建了自己的类来获取适当的记录器实例:
public static Logger getLogger(Level level, String name) {
Logger logger;
logger = (name != null) ? Logger.getLogger(name) : Logger.getAnonymousLogger();
logger.setLevel(level);
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(level);
logger.addHandler(handler);
return logger;
}
但是在使用它之后,我的记录器会记录每个级别两次:
private static final Logger logger = testlogger.getLogger(Level.INFO, "testname");
public static void main(String[] args) {
try {
throw new IllegalArgumentException("Uuuuu!!!");
} catch (IllegalArgumentException e) {
logger.log(Level.SEVERE, "Something wrong");
logger.log(Level.WARNING, "Something wrong");
logger.log(Level.INFO, "Something wrong");
logger.log(Level.CONFIG, "Something wrong");
logger.log(Level.FINE, "Something wrong");
logger.log(Level.FINER, "Something wrong");
logger.log(Level.FINEST, "Something wrong");
}
}
输出:
08.07.2013 09:37:08 xxx.testclass main SCHWERWIEGEND:出了点问题
08.07.2013 09:37:08 xxx.testclass main SCHWERWIEGEND:出了点问题
08.07.2013 09:37:08 xxx.testclass main 警告:出了点问题
08.07。 2013 09:37:08 xxx.testclass 主要警告:出了点问题
08.07.2013 09:37:08 xxx.testclass 主要信息:出了点问题
08.07.2013 09:37:08 xxx.testclass 主要信息:出了点问题
我猜,Logger 添加了一些默认处理程序,所以我尝试过:
for (Handler h : logger.getHandlers()) {
logger.removeHandler(h);
}
在添加 ConsoleHanlder 之前,但没有结果。
从我提到的帖子中,我了解到为了显示更好、更精细、最好的关卡,我必须添加 ConsoleHandler。
所以我的问题是“如何强制记录器仅使用 ConsoleHandler”?