У меня есть существующий пакет, в котором используется commons.logging. Я хотел бы установить logLevel для классов в комплекте во время тестирования плагина eclipse. Испытание не имеет или требует log4j как комплект. Поэтому мне нужно знать, как настроить логгер jsr-47, видимый внутри пакета.Как настроить commons.logging для пакета, поддерживаемого jsr-47?
ответ
JSR-47 делится одним менеджером журналов на всей JVM. Клиент должен инициализировать свойство протоколирования из ресурса:
InputStream resourceAsStream = getClass().getResourceAsStream("logging.properties");
LogManager.getLogManager().readConfiguration(resourceAsStream);
ресурса должен обрабатывать два общих яву лесозаготовительных подводных камней:
- Установите корневой регистратор, чтобы позволить более точному выводу (в противном случае вещь получить подавила здесь)
- Установите пакет регистратора, чтобы позволить более тонкий выход (в противном случае вещи получить подавил здесь)
это выглядит следующим образом:
handlers = java.util.logging.ConsoleHandler
.level=FINEST
test=FINEST
java.util.logging.ConsoleHandler.level = FINEST
Мишень активизирует и использует commons.logging обычным способом:
log = LogFactory.getLog(getClass().getName();
log.debug("Badaboom");
Выход затем переходит к общему LogManager, а затем в консоли.
Caveat: Конфигурация, которая считывается для теста, может быть динамически изменена в других местах кода. Если есть запах этого события, зарегистрируйте прослушиватель изменений свойств с помощью Менеджера и остановите код с точкой останова, чтобы найти код, изменяющий конфигурацию.
Примечание: На этом этапе также становится понятно, почему java.util.logging не очень хорошо подходит для OSGI: Тот же класс и, следовательно, имя регистратор может зарегистрировать с помощью различных пучков, накладывая настройки.