ПОЧЕМУ
Как уже упоминалось @Sheepy, причина, по которой он не работает, заключается в том, что java.util.logging.Logger
имеет корневой логгер, по умолчанию Level.INFO
, и ConsoleHandler
прилагается к этому корневому логгеру и по умолчанию Level.INFO
.Поэтому, чтобы увидеть вывод FINE
(, FINER
или FINEST
), необходимо установить значение по умолчанию для корневого регистратора и его ConsoleHandler
в Level.FINE
следующим образом:
Logger.getLogger("").setLevel(Level.FINE);
Logger.getLogger("").getHandlers()[0].setLevel(Level.FINE);
Проблема вашего обновления (решение)
Как упоминалось @mins, вы будете дважды печатать сообщения на консоли для INFO
и выше:сначала анонимным регистратором, затем его родителем, корневым регистратором, который также имеет ConsoleHandler
, установленный по умолчанию на INFO
.Чтобы отключить корневой регистратор, вам необходимо добавить следующую строку кода: logger.setUseParentHandlers(false);
Существуют и другие способы предотвращения обработки журналов по умолчанию. Консольный обработчик корневого регистратора, упомянутый @Sheepy, например:
Logger.getLogger("").getHandlers()[0].setLevel( Level.OFF );
Но Logger.getLogger("").setLevel( Level.OFF );
не будет работать, потому что он блокирует только сообщение, переданное непосредственно корневому регистратору, а не сообщение от дочернего регистратора.Чтобы проиллюстрировать, как работает Logger Hierarchy
, я рисую следующую диаграмму:
![enter image description here](https://i.stack.imgur.com/ApUgh.jpg)
public void setLevel(Level newLevel)
установите уровень журнала, указавкакие уровни сообщений будут регистрироваться этим регистратором.Уровни сообщений ниже этого значения будут отброшены.Значение уровня Level.OFF можно использовать для отключения регистрации.Если новый уровень равен нулю, это означает, что этот узел должен наследовать свой уровень от своего ближайшего предка с определенным (ненулевым) значением уровня.