Даже при том, что уровень Регистратора установлен на ВСЕ, ConsoleHandler (Обработчик по умолчанию на регистраторе) все еще имеет уровень по умолчанию ИНФОРМАЦИИ. Это прибывает из значения по умолчанию logging.properties в JAVA_HOME/jre/lib
Вместо того, чтобы перебирать все обработчики и устанавливать уровень ведения журнала, я предпочитаю устанавливать только уровень обработчика консоли:
//get the top Logger
Logger topLogger = java.util.logging.Logger.getLogger("");
// Handler for console (reuse it if it already exists)
Handler consoleHandler = null;
//see if there is already a console handler
for (Handler handler : topLogger.getHandlers()) {
if (handler instanceof ConsoleHandler) {
//found the console handler
consoleHandler = handler;
break;
}
}
if (consoleHandler == null) {
//there was no console handler found, create a new one
consoleHandler = new ConsoleHandler();
topLogger.addHandler(consoleHandler);
}
//set the console handler to fine:
consoleHandler.setLevel(java.util.logging.Level.FINEST);
Человек на моем рабочем месте обнаружил следующее для работы:
public class Foo {
private final static Logger logger = Logger.getLogger(Foo.class.getName());
public static final void main(String[] args) {
ConsoleHandler ch = new ConsoleHandler();
ch.setLevel(Level.FINEST);
Foo.logger.addHandler(ch);
Foo.logger.setLevel(Level.FINEST);
Foo.logger.finest("test");
}
}
Если вы просто установите root или обработчик на лучший (исключительно), то это не сработает. Когда я устанавливаю оба параметра на FINEST
, он работает. Его объяснение было таким:
И регистратор, и его обработчики имеют уровни регистрации… Порядок фильтрации - регистратор, затем обработчики. ) à сообщение останавливается фильтром регистратора и никогда не попадает в обработчик ... Ничего не выводится.
myLogger.info ("foo")
à проходит оба фильтра иfoo
].Теперь ...
Регистратор myLogger
имеет уровеньFINEST
и единственныйConsoleHandler myHandler
, который имеет уровеньFINEST
] myLogger.fine ("foo")
à пропускает оба фильтра и выводится "foo
".
myLogger.info ("foo")
à пропускает оба фильтра и] foo
.