Как инициализировать log4j2 в приложении на основе конфигурации Spring Java во время модульных тестов?

Я использую Spring Framework (4.1.0) для создания примера приложения, в котором я могу играть с модульными тестами.

В моем тестовом классе используется аннотация @RunWith(SpringJUnit4ClassRunner.class), которая регистрирует ПРЕДУПРЕЖДЕНИЯ

log4j:WARN Не удалось найти приложения для регистратора (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).

log4j:WARN Пожалуйста, правильно инициализируйте систему log4j.

в консоли, потому что я не использую конфигурацию на основе файла log4j2.

Мой тестовый класс также использует аннотацию @ContextConfiguration(classes = { AppConfig.class, ServletConfig.class }), чтобы указать на контекст, в котором я пытаюсь инициализировать log4j2.

Вопрос: как правильно инициализировать log4j2, чтобы использовать его с SpringJUnit4ClassRunner без файловой конфигурации?

Другие подходы к настройке на основе Java приветствуются :)


person xyz    schedule 13.09.2014    source источник
comment
Я помещаю файл log4j.xml в свою папку test/resources.   -  person Hannes    schedule 13.09.2014
comment
И для записи SpringJUnit4ClassRunner не имеет ничего общего с log4j.   -  person Hannes    schedule 13.09.2014
comment
@ Ханнес, поправьте меня, если я ошибаюсь, но в источнике SpringJUnit4ClassRunner вначале у нас есть private static final org.apache.commons.logging.Log logger;, что означает, что это связано с log4j2.   -  person xyz    schedule 13.09.2014
comment
Это ведение журнала общих ресурсов, и он будет искать используемый вами механизм ведения журнала. Поэтому, если он найдет библиотеку log4, он будет использовать это. Если ничего не будет найдено, он будет использовать sysout.   -  person Hannes    schedule 13.09.2014
comment
Вы правы, но тогда вопрос все еще актуален.   -  person xyz    schedule 13.09.2014


Ответы (3)


Вы можете инициализировать Log4j2 программно. Пример здесь на веб-сайте Log4j2 в разделе < em>'Программное добавление к текущей конфигурации', показывающее, как добавить добавление.

person Excite    schedule 20.01.2015

Добавьте следующее содержимое файла как log4j.xml в корень пути к классам:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true" xmlns:log4j='http://jakarta.apache.org/log4j/'> 
   <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n"/>
      </layout>
   </appender>
   <root>
      <level value="INFO"/>
      <appender-ref ref="consoleAppender"/>
   </root>
</log4j:configuration>

Это должно настроить log4j. Тем не менее, проверьте путь к вашей библиотеке. В любом месте должна быть банка log4j.

person Hannes    schedule 13.09.2014

В вашем пути к классам могут быть как log4j, так и log4j2 jar.

Итак, SpringJUnit4ClassRunner пытается использовать log4j вместо log4j2. Удалите банку log4j и используйте вместо нее log4j-1.2-api.

http://logging.apache.org/log4j/2.x/faq.html#what_jars

person Victor Lyuboslavsky    schedule 18.01.2015