Как я могу настроить 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:

  1. Установите корневой логгер, чтобы разрешить более точный вывод (в противном случае все будет подавлено)
  2. Установите регистратор пакетов, чтобы разрешить более точный вывод (в противном случае все будет подавлено)

Это выглядит так:

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: один и тот же класс и, следовательно, имя регистратора могут регистрироваться разными пакетами, накладывая настройки.

Другие вопросы по тегам