Глядя на последний написанный мной тестовый пример JUnit, я вызвал метод BasicConfigurator.configure () log4j внутри конструктора класса. Это отлично сработало для запуска только одного класса из команды Eclipse «запустить как тестовый пример JUnit». Но я понимаю, что это неправильно: я почти уверен, что наш основной набор тестов запускает все эти классы из одного процесса, и поэтому конфигурация log4j должна происходить где-то выше.
Но мне все равно нужно несколько раз запускать тестовый пример, и в этом случае я хочу настроить log4j. Куда мне поместить вызов конфигурации, чтобы он запускался, когда тестовый пример запускается автономно, но не когда тестовый пример запускается как часть более крупного набора?
Ответы:
В
LogManager
классе определяет , какие log4j конфигурации для использования в статическом блоке , который запускается при загрузке класса. Для конечных пользователей есть три варианта:log4j.defaultInitOverride
false, он вообще не будет настраивать log4j.Укажите вручную путь к файлу конфигурации и переопределите поиск пути к классам. Вы можете указать местоположение файла конфигурации напрямую, используя следующий аргумент
java
:-Dlog4j.configuration=<path to properties file>
в конфигурации вашего тестового бегуна.
Разрешите log4j сканировать путь к классам в поисках файла конфигурации log4j во время теста. (по умолчанию)
См. Также онлайн-документацию .
источник
-Dlog4j.configurationFile=log4j2.xml
. Кроме того , если вы пытаетесь отлаживать загрузки / запуск, этот параметр может быть полезным:-Dlog4j2.debug=true
.Обычно я просто помещаю файл log4j.xml в src / test / resources и позволяю log4j найти его сам по себе: код не требуется, инициализация log4j по умолчанию подберет его. (Обычно я все равно хочу установить свои собственные регистраторы на «DEBUG»)
источник
Вы можете изучить Simple Logging Facade для Java (SLF4J) . Это фасад, который окружает Log4j и не требует вызова начальной настройки, такого как Log4j. Также довольно легко переключить Log4j на Slf4j, поскольку различия в API минимальны.
источник
Я использую системные свойства в log4j.xml:
... <param name="File" value="${catalina.home}/logs/root.log"/> ...
и начать тесты с:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> <configuration> <systemProperties> <property> <name>catalina.home</name> <value>${project.build.directory}</value> </property> </systemProperties> </configuration> </plugin>
источник