Как настроить log4j. properties для SpringJUnit4ClassRunner?
внезапно это происходит во время теста JUnit. Все работало, я написал несколько новых тестов и эта ошибка произошла. Если я верну его, он не уйдет. Почему?
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
7 ответов:
новые тесты вы написали (прямо или косвенно) использовать классы, которые регистрируются с помощью Log4j.
Log4J должен быть настроен для этого ведения журнала, чтобы работать должным образом.
поставить log4j. properties (или log4j.xml) файл в корень вашего тестового classpath.
Он должен иметь некоторую базовую конфигурацию, такую как
# Set root logger level to DEBUG and its only appender to A1. log4j.rootLogger=DEBUG, A1 # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n # An alternative logging format: # log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%nприложение выводит на консоль по умолчанию, но вы также можете явно установить цель вот такая:
log4j.appender.A1.Target=System.outэто перенаправит все выходные данные в хорошем формате на консоль. Более подробную информацию можно найти здесь в разделе Log4J руководство,
log4j ведение журнала будет правильно настроено, и это предупреждение исчезнет.
Если вы не хотите возиться с файлом, вы можете сделать что-то подобное в ваш код:
static { Logger rootLogger = Logger.getRootLogger(); rootLogger.setLevel(Level.INFO); rootLogger.addAppender(new ConsoleAppender( new PatternLayout("%-6r [%p] %c - %m%n"))); }
добавить log4j. properties(log4j.xml) файл с по крайней мере одним приложением в корне вашего пути к классам.
содержимое файла (log4j. properties) может быть таким же простым, как
log4j.rootLogger=WARN,A1 # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%nэто позволит log4j ведение журнала с уровнем журнала по умолчанию как
WARNи используйте консоль java для регистрации сообщений.
У меня есть log4j. свойства настроены правильно. Это не проблема. Через некоторое время я обнаружил, что проблема была в Eclipse IDE, которая имела старую сборку в "кэше" и не создавала новую (проблема Maven dependecy). Я должен был построить проект вручную, и теперь он работает.
Я использовал Maven в eclipse, и я не хотел иметь дополнительную копию файла свойств в корневой папке. Вы можете сделать следующее в Eclipse:
- открыть диалоговое окно запуска (нажмите маленькую стрелку рядом с кнопкой воспроизведения и перейдите к запуску конфигураций)
- перейдите на вкладку "classpath"
- выберите "записи пользователей" и нажмите кнопку "Дополнительно" справа.
- Теперь выберите переключатель "добавить внешнюю папку".
- выберите папку ресурсов
Я знаю, что это старый, но у меня тоже были проблемы. Для весны 3 с помощью Maven и Eclipse мне нужно было поставить log4j.xml в src / test / resources для правильного ведения журнала модульного теста. Размещение в корне теста не сработало для меня. Надеюсь, это поможет другим.
потому что мне не нравится иметь дубликаты файлов (log4j.properties в test и main), и у меня довольно много тестовых классов, каждый из них работает с классом SpringJUnit4ClassRunner, поэтому мне нужно его настроить. Это то, что я использую:
import java.io.FileNotFoundException; import org.junit.runners.model.InitializationError; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.util.Log4jConfigurer; public class MySpringJUnit4ClassRunner extends SpringJUnit4ClassRunner { static { String log4jLocation = "classpath:log4j-oops.properties"; try { Log4jConfigurer.initLogging(log4jLocation); } catch (FileNotFoundException ex) { System.err.println("Cannot Initialize log4j at location: " + log4jLocation); } } public MySpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError { super(clazz); } }при его использовании замените SpringJUnit4ClassRunner на MySpringJUnit4ClassRunner
@RunWith(MySpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:conf/applicationContext.xml") public class TestOrderController { private Logger LOG = LoggerFactory.getLogger(this.getClass()); private MockMvc mockMvc; ... }
Comments