Как настроить ведение журнала 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. Вы можете:
- Установить
java.util.logging.config.file
свойство и использовать файл свойств. - Установить
java.util.logging.config.class
свойства и создайте файл класса с конструктором без аргументов, чтобы выполнить любой код, который вы хотите вручную настроить регистраторы. - Используйте 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());