Как изменить уровень логирования в log4j2 во время выполнения программы

Пожалуйста, поправьте меня, если я ошибаюсь, но кажется, что log4j2.xml должен быть в пути к классам программы, и все в пути к классам упаковывается в файл .jar, когда вы создаете автономный исполняемый файл .jar программы. .

В этом случае XML-файл нельзя будет изменить после того, как программа будет экспортирована в файл .jar. Таким образом, не представляется возможным изменить уровень ведения журнала без повторного экспорта программы.

Пожалуйста, скажите мне, что я ошибаюсь и что есть способ изменить уровень ведения журнала во время работы программы, используя, скажем, раскрывающийся список в JFrame, чтобы пользователь мог выбрать уровень ведения журнала.


person Sturm    schedule 23.05.2014    source источник
comment
возможный дубликат Как отключить предупреждения log4j?   -  person Stephen P    schedule 23.05.2014
comment
Смотрите мой комментарий ниже к ответу пользователя 3669653.   -  person Sturm    schedule 23.05.2014
comment
На самом деле, проведя еще несколько исследований, я обнаружил, что этот вопрос уже был спросил и ответил. Таким образом, теперь это дубликат. Мои извенения.   -  person Sturm    schedule 23.05.2014


Ответы (2)


Вы можете изменить уровень регистратора с помощью Java Management Extensions Bean (JMX Bean), включенного в библиотеку:

  1. Включите порт JMX при запуске вашего приложения:

    -Dcom.sun.management.jmxremote.port=[номер_порта]

  2. Используйте любой из доступных клиентов JMX (JVM предоставляет один в JAVA_HOME/bin/jconsole.exe) при выполнении вашего приложения.

  3. В JConsole найдите bean-компонент org.apache.logging.log4j2.Loggers.

  4. Измените уровень вашего регистратора

Что мне больше всего нравится, так это то, что вам не нужно изменять свой код или конфигурацию для управления этим. Все внешнее и прозрачное.

Дополнительная информация: http://logging.apache.org/log4j/2.x/manual/jmx.html

person Victor    schedule 24.05.2014

Я использовал это в прошлом

LogManager.getRootLogger().setLevel(Level.DEBUG);

Таким образом вы можете перейти на любой из уровней журнала.

person user3669653    schedule 23.05.2014
comment
Нет, это для предыдущих версий log4j. Я запускаю log4j2 (rc1). Для объекта регистратора нет метода setLevel. По крайней мере, ни один из тех, что я могу найти. - person Sturm; 23.05.2014