Насколько я понимаю, log4j может обрабатывать системное свойство -Dlog4j.debug. Если вы запустите свое приложение, вы получите отладочный вывод log4j.
Пример: java -Dlog4j.debug -jar test.jar
Есть ли что-то подобное для log4j 2?
Насколько я понимаю, log4j может обрабатывать системное свойство -Dlog4j.debug. Если вы запустите свое приложение, вы получите отладочный вывод log4j.
Пример: java -Dlog4j.debug -jar test.jar
Есть ли что-то подобное для log4j 2?
В соответствии с LOG4J2-282 это можно сделать с помощью вашей конфигурации (log4j2.xml).
Похоже, что они также (повторно) внедрили системное свойство в log4j-2.0b8, хотя некоторые комментарии к этой проблеме JIRA указывают, что он все еще может работать некорректно.
Обновление в январе 2018 года:
Из Log4j 2.10 это легко: просто запустите свою программу с системным свойством log4j2.debug
(нет значения, пустая строка в порядке).
Текущая (log4j-2.1) документация в журнале состояния немного запутанна. В основном:
org.apache.logging.log4j.simplelog.StatusLogger.level
.<Configuration status="trace">
.UPDATE: документация была улучшена в log4j-2.2.
Это может сбивать с толку, ближайший эквивалент аргумента командной строки 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.
У меня было разочаровывающее количество проблем с запуском и запуском Log4J2, и печать StatusLogger не является исключением. Теоретически вы можете установить его в конфигурационном файле с полем status
, однако я не смог выполнить эту работу так.
Однако вы можете запустить следующее в начале основного метода:
StatusConsoleListener listener = new StatusConsoleListener(Level.ALL);
StatusLogger.getLogger().registerListener(listener);
LogManager.getLogger(LogManager.ROOT_LOGGER_NAME); // initialize logger
Обратите внимание, что ваш класс main()
не может иметь никаких статических регистраторов, или они будут инициализированы до того, как это будет вызвано, что означает, что сообщения о статусе загрузки не будут печататься.