Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Динамическая настройка уровня Log4j для нескольких JVM

Автор вопроса: PNSОтветов: 1

Я работаю в приложении, имеющем ряд простых ванильных компонентов Java, каждый из которых работает в отдельной JVM. Все эти компоненты используют Log4j, и нет возможности перейти на другую библиотеку ведения журнала.

Как следует из названия, я ищу "простой" способ динамически применять уровень ведения журнала Log4j ко всем компонентам/JVM. Под "простым" я подразумеваю отсутствие переписывания исходного кода (в противном случае можно использовать, например, интерфейс для получения/установки уровня ведения журнала, и все классы реализуют этот интерфейс).

В Интернете есть статьи об использовании JMX (например, через класс LoggerDynamicBean (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/jmx/LoggerDynamicMBean.html).) дистрибутива Log4j.

В такой интересной статье описывается, как это реализовать с помощью сервера приложений (Tomcat): http://www.devx.com/Java/Article/32359/1954. Сервер приложений кажется необходимым как реализация класса MBeanServer, в котором все регистраторы будут зарегистрированы Log4j как MBeans.

Есть ли какая-либо реализация, которая выполняет эту динамическую настройку уровня ведения журнала для нескольких JVM, либо через JMX, либо любым другим способом?

  • Через JVM? Нет, вам нужно поговорить с каждой JVM, потому что у каждой из них будут свои собственные регистраторы, прослушиватели JMX и т. д. Dave Newton 01.10.2011
  • Или поговорите с тем же компонентом. Например, если все они могут общаться с базой данных или файловой системой, сохраняйте там уровень ведения журнала. Dan 01.10.2011
  • Да, такие мысли у меня тоже были. Я просто надеялся, что мне не хватает чего-то более автоматизированного. :-) PNS 01.10.2011

javalog4jjmx

Ответы

Ответ 1 · рейтинг 1 · digitaljoel

Будь проще. Направьте все JVM на один и тот же файл конфигурации log4j, используйте это, чтобы время от времени перезагружать их.

PropertyConfigurator.configureAndWatch( yourConfigFile, yourReloadInterval);

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы