Где я могу настроить log4j в тестовом классе JUnit? - PullRequest
80 голосов
/ 18 мая 2009

Глядя на последний тестовый пример JUnit, который я написал, я вызвал метод BasicConfigurator.configure () log4j внутри конструктора класса. Это отлично работало для запуска только этого единственного класса из команды Eclipse «run as JUnit test case». Но я понимаю, что это неправильно: я почти уверен, что наш основной набор тестов запускает все эти классы из одного процесса, и поэтому конфигурация log4j должна происходить где-то выше.

Но мне все еще нужно несколько раз запускать тестовый пример, и в этом случае я хочу настроить log4j. Куда мне поместить вызов конфигурации, чтобы он запускался, когда контрольный пример выполняется автономно, а не тогда, когда контрольный пример запускается как часть большего набора?

Ответы [ 4 ]

57 голосов
/ 18 мая 2009

Обычно я просто помещаю файл log4j.xml в src / test / resources и позволяю log4j найти его самому: никакого кода не требуется, при инициализации log4j по умолчанию его подберут. (В любом случае я обычно хочу установить для собственных регистраторов «DEBUG»)

49 голосов
/ 18 мая 2009

Класс LogManager определяет, какую конфигурацию log4j использовать в статическом блоке , который запускается при загрузке класса. Есть три варианта, предназначенные для конечных пользователей:

  1. Если вы укажете log4j.defaultInitOverride в false, он не будет настраивать log4j вообще.
  2. Укажите вручную путь к файлу конфигурации и переопределите поиск пути к классам. Вы можете указать местоположение файла конфигурации напрямую, используя следующий аргумент для java:

    -Dlog4j.configuration=<path to properties file>

    в конфигурации вашего тестового бегуна.

  3. Разрешить log4j сканировать путь к классам для файла конфигурации log4j во время теста. (по умолчанию)

См. Также онлайн-документацию .

6 голосов
/ 18 мая 2009

Возможно, вы захотите взглянуть на Simple Logging Facade для Java (SLF4J) . Это фасад, который обволакивает Log4j и не требует первоначального вызова установки, такого как Log4j. Также довольно легко отключить Log4j для Slf4j, так как различия API минимальны.

5 голосов
/ 04 октября 2013

Я использую системные свойства в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...