Где мне настроить log4j в тестовом классе JUnit?

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

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


person skiphoppy    schedule 18.05.2009    source источник
comment
Я собираюсь предположить здесь log4j 1.x, а не 2 ...   -  person rogerdpack    schedule 16.05.2018


Ответы (4)


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

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

    -Dlog4j.configuration=<path to properties file>

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

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

См. Также интерактивную документацию.

person Paul Morie    schedule 18.05.2009
comment
Как он узнает, что это файл конфигурации log4j? Какое имя файла? (log4j.xml?) - person Chad; 24.08.2013
comment
@Chad: Я отредактировал свой ответ, чтобы ответить на ваш вопрос. Пожалуйста, посмотрите ссылку на статический блок, чтобы узнать, как именно это реализовано. - person Paul Morie; 29.08.2013
comment
Я использую log4j2, и мне пришлось использовать следующий параметр, чтобы указать файл: -Dlog4j.configurationFile=log4j2.xml. Также, если вы пытаетесь отладить загрузку / запуск, этот параметр может быть полезен: -Dlog4j2.debug=true. - person Kent; 02.11.2017
comment
Есть ли способ уточнить этот ответ? - person markthegrea; 20.08.2018

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

person araqnid    schedule 18.05.2009
comment
Для стандартного тестирования здания я бы установил Log4j на предупреждение или даже ошибку. Если тесты проходят успешно (также отрицательные), не должно быть никаких журналов, которые привлекают внимание пользователей. - person keiki; 21.11.2012
comment
Да, это правильно для log4j 1.x. Для log4j2, по-видимому, вы можете использовать более экзотические файлы, такие как файл log4j2-test.properties ... logging.apache.org/log4j/2.x/manual/configuration.html :) - person rogerdpack; 16.05.2018
comment
Вы уверены, что насчет log4j-test.properties? Документация об иерархии мест, которые конфигурация будет искать, не очень ясна. - person Sreeram Boyapati; 05.02.2021

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

person James McMahon    schedule 18.05.2009

Я использую системные свойства в 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>
person gavenkoa    schedule 04.10.2013