Как настроить ведение журнала JUL во время тестов JUnit?

У меня та же проблема, что и здесь: Как установить уровень журнала DEBUG во время тестов Junit? - кроме того, что я работаю с java.util.logging, а не Log4j.

В частности, я конвертирую существующее (созданное Maven) приложение из Log4j в java.util.logging, чтобы соответствовать требованиям клиента (не подлежит обсуждению). Все использует SLF4J, поэтому изменения кода минимальны. Существует более тысячи тестовых классов, распределенных по нескольким модулям; в настоящее время у нас есть log4j.properties файл в src/test/resources из этих модулей для настройки вывода журнала испытаний.

Я думаю, что важно, чтобы вывод журнала был легко настраиваемым для тестов: если разработчик нарушает тест и хочет прочитать вывод журнала, я бы предпочел, чтобы они локально настраивали конфигурацию журнала, а не начинали возиться с (тщательно подобранными) уровнями журнала в код, приводящий к синдрому "все записано в информации". Обратите внимание, что я хочу, чтобы конфигурация журнала теста применялась к "тесту + коду приложения при выполнении в условиях теста".

Я не хочу добавлять настройки журнала для каждого класса Test (как предлагается здесь: Как установить уровень логирования для теста JUnit) из-за большого количества тестов. Это кажется неправильным решением. Я также не хочу редактировать JVM logging.properties файл, так как это повлияет на все. Это приложение не единственное, что я делаю. Я также должен был заставить всех остальных сделать такие же изменения.

Существующая система работает, потому что Log4j забирает /log4j.properties из класса. Есть ли эквивалентный механизм для java.util.logging ?

Текущее мышление: добавить logging.properties файл, чтобы заменить существующий конфиг, и попробуйте взломать конфиг Maven, чтобы установить java.util.logging.config.file чтобы указать на это. Есть ли более аккуратный способ?

2 ответа

Решение

Есть ли более аккуратный способ?

Это, вероятно, самый надежный способ настройки конфигурации ведения журнала.

Есть ли эквивалентный механизм для java.util.logging?

Параметры конфигурации перечислены в документации java.util.logging.LogManager. Вы можете:

  1. Установить java.util.logging.config.file свойство и использовать файл свойств.
  2. Установить java.util.logging.config.class свойства и создайте файл класса с конструктором без аргументов, чтобы выполнить любой код, который вы хотите вручную настроить регистраторы.
  3. Используйте LogManager.readConfiguration(InputStream) и ClassLoader.getResourceAsStream(String) для загрузки новой конфигурации. Эту логику можно сочетать с java.util.logging.config.class собственность тоже.

В рамках всего проекта src/test/resources/logging.properties может быть установлен специально для модульного тестирования через java.util.logging.config.file Системное свойство, используя одну строку в вашем @BeforeClass метод:

System.setProperty("java.util.logging.config.file", ClassLoader.getSystemResource("logging.properties").getPath());
Другие вопросы по тегам