Log4j 2. Как получить отладочные сообщения log4j?

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

Пример: java -Dlog4j.debug -jar test.jar

Есть ли что-то подобное для log4j 2?

Ответ 1

В соответствии с LOG4J2-282 это можно сделать с помощью вашей конфигурации (log4j2.xml).

Похоже, что они также (повторно) внедрили системное свойство в log4j-2.0b8, хотя некоторые комментарии к этой проблеме JIRA указывают, что он все еще может работать некорректно.

Ответ 2

Обновление в январе 2018 года:

Из Log4j 2.10 это легко: просто запустите свою программу с системным свойством log4j2.debug (нет значения, пустая строка в порядке).


Текущая (log4j-2.1) документация в журнале состояния немного запутанна. В основном:

  • До тех пор, пока не будет найдена конфигурация, уровень состояния регистратора можно контролировать с помощью системного свойства org.apache.logging.log4j.simplelog.StatusLogger.level.
  • После того, как найдена конфигурация, уровень состояния регистратора можно контролировать в файле конфигурации с атрибутом "статус", например: <Configuration status="trace">.

UPDATE: документация была улучшена в log4j-2.2.

Ответ 3

Это может сбивать с толку, ближайший эквивалент аргумента командной строки Log4J 1.x -Dlog4j.debug - это -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace, который устанавливает уровень log4J 2.x "status logger" для отслеживания и предоставляет подробный вывод о конфигурации ведения журнала.

Log4J 1.x позволяет вручную указать расположение конфигурационного файла в командной строке с помощью -Dlog4j.configuration=file:///var/lib/tomcat7/log4j.xml, где файл конфигурации находится в /var/lib/tomcat7/log4j.xml. В Log4J 2.x есть тонкая разница в аргументе -Dlog4j.configurationFile=file:///var/lib/tomcat7/log4j.xml, 'configuration File', а не в конфигурации.

Очевидно, вам нужно убедиться, что ваш файл конфигурации подходит для используемой версии Log4J, структура XML отличается от 1.x и 2.x.

Ответ 4

У меня было разочаровывающее количество проблем с запуском и запуском Log4J2, и печать StatusLogger не является исключением. Теоретически вы можете установить его в конфигурационном файле с полем status, однако я не смог выполнить эту работу так.

Однако вы можете запустить следующее в начале основного метода:

StatusConsoleListener listener = new StatusConsoleListener(Level.ALL);
StatusLogger.getLogger().registerListener(listener);
LogManager.getLogger(LogManager.ROOT_LOGGER_NAME); // initialize logger

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