Подтвердить что ты не робот

Выход Log4j не отображается в консоли Eclipse

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

Все, что я делаю в моем Unit test, является следующим и по какой-то причине ТОЛЬКО оператор 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, Build id: 20100617-1415
4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Пробовали ли вы создать пустой проект с помощью только log4j и junit, только с указанным выше кодом и запуском?

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

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

EDIT:

Если вы запускаете более одного теста за один раз, каждый из них будет вызывать 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, а не reset.

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

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

Ответ 4

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

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

Ответ 5

Мысль о том, что это был настоящий дефект, но оказалось, что размер консоли был ограничен, и было отключено старое содержимое за 80000 символов.

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

Ответ 6

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

Посмотрите здесь простой пример здесь.

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j.version}</version>
            <scope>test</scope>
        </dependency>

Ответ 11

Убедитесь, что ваш log4j.properties или log4j.xml скопирован в ваш путь к среде IDE и загружается при вызове BasicConfigurator.configure()

Ответ 12

У меня когда-то была такая проблема, когда я загружал lib из Amazon (для веб-сервисов Amazon), и этот файл jar содержал файл log4j.properties и каким-то образом использовался вместо моего старого старого автономного log4j. Стоит проверить.

Ответ 13

Есть случай, который я делаю: исключение случается где-то, но я выбрал исключение без печати ничего, таким образом, код даже не дошел до кода log4j, поэтому никакого вывода.

Ответ 14

У меня была такая же ошибка.

Я использую Jboss 7.1 AS. В файле конфигурации - standalone.xml отредактируйте следующий тег. (остановите свой сервер и отредактируйте)

     <root-logger>
            <level name="ALL"/>
            <handlers>
                <handler name="CONSOLE"/>
                <handler name="FILE"/>
            </handlers>
    </root-logger>

ALL имеет самый низкий ранг и предназначен для включения всех протоколов.

Ответ 15

Окно консоли Eclipse имеет свойство фильтра (в некоторых случаях активна только system.err).

Rigt щелкните в окне консоли Eclipse → Настройки → Консоль и убедитесь, что флажок

Показывать, когда программа записывается в стандартный

активен.

В качестве альтернативы вы можете настроить log4j для записи всегда в System.err следующим образом:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="AppConsole" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.err" />
        <param name="Encoding" value="ISO-8859-15" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{dd.MM.yyyy HH:mm:ss} %5p kontext.%c{1}:%L - %m%n" />
        </layout>
    </appender>
    <root>
        <level value="debug" />
        <appender-ref ref="AppConsole" />
    </root>
</log4j:configuration> 

Ответ 16

если файл log4j.xml отсутствует в проекте, и вы используете tomcat, попробуйте перейти к экземпляру tomcat и выполнить поиск log4j. Попробуйте изменить уровень консолиAppender для отладки и повторного развертывания приложения в tomcat. Это может помочь.

Ответ 17

Моя ситуация была решена путем указания аргумента VM для отлаживаемой программы JAVA, я полагаю, вы также можете установить это в файле `eclipse.ini, а также:

enable-debug-level-in-eclipse

Ответ 18

Простой файл log4j.properties может выглядеть следующим образом:

log4j.rootCategory=debug,console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.immediateFlush=true
log4j.appender.console.encoding=UTF-8
log4j.appender.console.threshold=info

log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d [%t] %-5p %c - %m%n

Поместите его в свой путь к классам (папка target/classes). Или вы, если у вас есть проект Maven, поместите его в ваш src/main/resources, и Eclipse скопирует его в ваш путь к классам.

Без файла конфигурации вы должны увидеть предупреждение Eclipse в консоли, например:

log4j:WARN No appenders could be found for logger.
log4j:WARN Please initialize the log4j system properly.