Выход Log4j не отображается в консоли Eclipse - PullRequest
25 голосов
/ 17 августа 2010

По какой-то причине моя консоль Eclipse больше не отображает инструкции Log4j INFO и DEBUG, когда я запускаю тесты JUnit.С точки зрения кода никаких изменений не произошло, поэтому это должно быть как-то связано с конфигурацией Eclipse.

Все, что я делаю в своем модульном тесте, заключается в следующем, и по какой-то причине ТОЛЬКО утверждение ERROR отображаетсяконсоль Eclipse.Зачем?Где мне искать улики?

public class SampleTest
{
   private static final Logger LOGGER = Logger.getLogger(SampleTest.class);

   @Before
   public void init() throws Exception
   {
       // Log4J junit configuration.
       BasicConfigurator.configure();

       LOGGER.info("INFO TEST");
       LOGGER.debug("DEBUG TEST");
       LOGGER.error("ERROR TEST");
   }
}

Подробности:

  • log4j-1.2.6.jar
  • junit-4.6.jar Eclipse
  • IDE для разработчиков Java, версия: Helios Release, идентификатор сборки: 20100617-1415

Ответы [ 17 ]

21 голосов
/ 17 августа 2010

Перейдите к Запуску конфигураций в вашем eclipse, затем аргументы -VM добавьте это: -Dlog4j.configuration = log4j-config_folder / log4j.xml

замените log4j-config_folder структурой вашей папки, где у вас есть log4j.xmlфайл

11 голосов
/ 17 августа 2010

Найдите в файле log4j.properties или log4j.xml уровень журнала. Вероятно, он установлен на ERROR вместо DEBUG

9 голосов
/ 17 августа 2010

Конфигурирование с помощью BasicConfigurator.configure(); устанавливает базовый консольный appender, установленный при отладкеПроект с настройкой выше и без другого кода (кроме теста) должен производить три строки регистрации в консоли.Я не могу сказать ничего, кроме «это работает для меня».

Вы пытались создать пустой проект только с log4j и junit, используя только приведенный выше код, и запустили его?

Кроме того, вЧтобы запустить метод @Before:

@Test
public void testname() throws Exception {
    assertTrue(true);
}

РЕДАКТИРОВАТЬ:

Если вы запустите более одного теста за раз, каждый из них вызовет init перед запуском.

В этом случае, если у вас было два теста, первый имел бы один регистратор, а второй тест снова вызвал бы init, дважды делая журнал (попробуйте) - вы должны получить 9 строк регистрации в консоли с двумя тестами.

Возможно, вы захотите использовать статический метод init с аннотацией @BeforeClass, чтобы избежать этого.Хотя это также происходит в разных файлах, возможно, вы захотите взглянуть на документацию по TestSuites в JUnit 4. И / или вызвать BasicConfigurator.resetConfiguration(); в аннотированном классе @AfterClass, чтобы удалить все регистраторы после каждого класса тестирования / набора тестов.

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

Testcase - это приведет к 9 строкам регистрации:

import static org.junit.Assert.assertTrue;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;

public class SampleTest
{
   private static final Logger LOGGER = Logger.getLogger(SampleTest.class);

   @Before
   public void init() throws Exception
   {
       // Log4J junit configuration.
       BasicConfigurator.configure();
   }

   @Test
    public void testOne() throws Exception {
       LOGGER.info("INFO TEST");
       LOGGER.debug("DEBUG TEST");
       LOGGER.error("ERROR TEST");

       assertTrue(true);
    }

   @Test
   public void testTwo() throws Exception {
       LOGGER.info("INFO TEST");
       LOGGER.debug("DEBUG TEST");
       LOGGER.error("ERROR TEST");

       assertTrue(true);
   }
}

Изменение метода init сводится к исключенным шести строкам:

@BeforeClass
public static void init() throws Exception
{
    // Log4J junit configuration.
    BasicConfigurator.configure();
}

Ваша проблема, вероятно, вызвана другим классом тестов или набором тестов, где уровень ведения журнала корневого регистратора установлен на ERROR, а не сбрасывается.

Вы также можете проверить это путем сброса в@BeforeClass, перед настройкой регистрации.

Имейте в виду, что эти изменения могут нарушить ожидаемое ведение журнала для других тестовых случаев, пока оно не будет зафиксировано во всех местах.Я предлагаю попробовать, как это работает в отдельной рабочей области / проекте, чтобы понять, как это работает.

6 голосов
/ 17 августа 2010

Стоит отметить, что если у вас есть файл log4j.properties в вашем пути к классам, вам не нужно вызывать BasicConfigurator.Описание настройки файла свойств: здесь .

Вы можете точно определить, является ли ваша IDE причиной проблемы, попытавшись запустить этот класс из командной строки с log4j.jar и log4j.properties на вашем пути к классам.

2 голосов
/ 16 марта 2015

Убедитесь, что при запуске тестовых случаев junit у вас есть файл log4j.properties или log4j.xml в папке test / resources.

2 голосов
/ 13 ноября 2013

Проверьте ваш файл log4j.properties

Проверьте простой пример здесь, на здесь .

2 голосов
/ 22 февраля 2012

Думал, что это был подлинный дефект, но оказалось, что размер моей консоли был ограничен и привел к обрезанию старого контента после 80000 символов.

Щелкните правой кнопкой мыши на консоли для настройки и увеличьте предельный размер консоли.

1 голос
/ 06 октября 2015

Добавьте тестовую зависимость к вашему pom к slf4j.

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j.version}</version>
            <scope>test</scope>
        </dependency>
1 голос
/ 17 августа 2010

Проверьте файлы конфигурации log4j в выходном каталоге (например, bin или target / classes) или в сгенерированных артефактах проекта (.jar / .war / .ear).Если это на вашем пути к классам, то оно будет обнаружено log4j.

1 голос
/ 17 августа 2010

Похоже, что log4j выбирает другой файл конфигурации, чем тот, который, как вы думаете, делает.

Поместите точку останова в log4j, где файл открыт, и посмотрите на файлы getAbsolutePath ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...