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

Установите лог файл log4j

В настоящее время я работаю над проектом, который использует log4j. Я запускаю тестовый файл (junit) и хотел бы настроить уровень журнала для отслеживания, чтобы я мог видеть, все ли значения верны. Классы, которые используют ведение журнала в проекте, содержат следующую строку:

private static final Log LOG = LogFactory.getLog(MatchTaskTest.class);

и используйте аналогичные функции для выполнения фактической отладки

LOG.trace("value");

Я никогда раньше не использовал log4j, знает ли кто-нибудь, как я могу изменить уровень журнала только для тестового теста, желательно просто определить параметр в диалоговом окне конфигурации запуска eclipse.

4b9b3361

Ответ 1

Использование другого файла конфигурации

Возможно, вы могли бы указать другой файл конфигурации.

java -Dlog4j.configuration=config file yourApp

Где:

  • config, файл конфигурации, например. log4j.properties или log4j.xml.
  • file, файл журнала, например. myApp.log
  • yourApp, вы, например, приложение. MyAppGUI

Или вы можете использовать класс

java -Dlog4j.configurationClass=config class yourApp

Где:

  • config, файл конфигурации, например. log4j.properties или log4j.xml.
  • class, любой настраиваемый класс инициализации, например LogManager, должен реализовывать org.apache.log4j.spi.Configurator
  • yourApp, вы, например, приложение. MyAppGUI

Вы можете увидеть больше в Apache log4j 1.2 - Краткое введение в log4j в разделе Процедура инициализации по умолчанию.

Изменение уровня программно

Кроме того, вы также можете использовать методы, предлагающие класс Logger, например public void setLevel(Level level), например:

Logger.getRootLogger().setLevel(Level.TRACE);

Поскольку вы хотите только для тестирования, вы можете использовать их. Но в клиентском коде рекомендуется не использовать, поскольку они перезаписывают параметры конфигурации по умолчанию в жестком кодировании. Лучший способ - использовать внешний файл конфигурации.

Ответ 2

В классе junit положите:

Logger.getRootLogger().setLevel(Level.TRACE);

где-то перед выполнением тестируемого метода. Он установит пороговый уровень корневого регистратора TRACE.

Ответ 3

Если вы используете Maven, у вас могут быть два файла конфигурации log4j:

  • один в src/main/resources, содержащий конфигурацию ведения журнала
  • один в src/test/resources, содержащий конфигурацию журнала проверки времени

Maven будет автоматически использовать последний во время тестирования и объединить его в свой артефакт (JAR, WAR и т.д.), чтобы он использовался в процессе производства. Вам не нужно возиться с ключами командной строки или чем-то еще.

Ответ 4

Я не думаю, что это возможно.

Конфигурационный файл позволит вам настроить, какие сообщения журнала на самом деле отображаются в журнале, а не на каком уровне будет отправляться каждое сообщение. Это имеет смысл - конфигурация не должна влиять на уровень сообщения.

javadoc имеет метод для каждого уровня журнала и общий метод журнала, который принимает приоритет, поэтому я не уверен, что там даже по умолчанию.

Вы можете установить конфигурационный файл в командной строке через -Dlog4j.configuration=<FILE_PATH>, чтобы вы могли настроить конкретную конфигурацию для этого тестового примера.

Ответ 5

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

Logger log1 = Deencapsulation.getField(Some.class,"logger");
log1.setLevel(Level.DEBUG);

Ответ 6

Обратите внимание, что файл log4j2.properties может содержать строку

filter.threshold.level = debug

Вы можете потратить целый день, пытаясь выяснить, почему ваши операторы LOG.trace() ничего не выводят!

Ответ 7

Я действительно положил его в метод @Before. Но я считаю, что он мог (и должен) быть помещен в @BeforeClass.

Если вы установите его в тело класса, вы получите ошибки компилятора.