Не следует ли устанавливать уровень для корневого регистратора, а также устанавливать уровень для всех дочерних регистраторов корневого регистратора?
Нет, очевидно, вы создаете новый объект регистратора. Javadoc для getLogger сообщает:
Если создается новый регистратор, его уровень журнала будет настроен на основе конфигурации LogManager, и он также будет настроен на отправку вывода журнала в обработчики своего родителя.
Обратите внимание, что даже если ранее существовал объект Logger с тем же именем, вы не можете полагаться на getLogger
, который возвращает тот же объект, который мог бы быть собран мусором, если естьнет строгой ссылки на объект.
Если ваша цель состоит в том, чтобы создать все объекты Logger в вашем проекте с одинаковым уровнем журнала, вы не должны делать это программно , но с помощью конфигурации .Вот где java.util.logging
пригодится.Общее преимущество заключается в том, что вы можете запускать свое приложение на разных уровнях журнала, даже не меняя ни одной строки кода.
Просто отредактируйте файл конфигурации (который по сути является вышеупомянутым LogManager configuration
).Он называется logging.properties
и находится в вашем каталоге JRE.Там вы можете отредактировать последний абзац и настроить уровни журнала для всего проекта или суженного класса:
############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################
myProject.MyClass.level = FINE
myProject.MyOtherNotSoImportantClass.level = INFO
mySecondProject.MainClass.level = NONE
Еще лучшее решение - скопировать logging.properties
в каталог проекта и вызвать приложение с помощью
java -Djava.util.logging.config.file=./src/test/resources/logging.properties