Как я могу настроить commons.logging для пакета, поддерживаемого jsr-47?
У меня есть существующий комплект, который использует commons.logging. Я хотел бы установить logLevel для классов в комплекте во время теста плагина eclipse. Тестируемый сам по себе не имеет или не требует log4j в качестве пакета. Поэтому мне нужно знать, как настроить регистратор jsr-47, видимый в комплекте.
1 ответ
JSR-47 использует один менеджер журналов для всей JVM. Клиент должен инициализировать свойства ведения журнала из ресурса:
InputStream resourceAsStream = getClass().getResourceAsStream("logging.properties");
LogManager.getLogManager().readConfiguration(resourceAsStream);
Ресурс должен обрабатывать две распространенные ошибки регистрации Java:
- Установите корневой логгер, чтобы разрешить более точный вывод (в противном случае все будет подавлено)
- Установите регистратор пакетов, чтобы разрешить более точный вывод (в противном случае все будет подавлено)
Это выглядит так:
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, а затем в консоль.
Предупреждение: конфигурация, которая читается для теста, может динамически изменяться в других местах кода. Если есть запах этого, зарегистрируйте прослушиватель изменения свойства в диспетчере и остановите код с точкой останова, чтобы найти код, изменяющий конфигурацию.
Примечание: на этом этапе также становится понятно, почему java.util.logging не очень подходит для OSGI: один и тот же класс и, следовательно, имя регистратора могут регистрироваться разными пакетами, накладывая настройки.