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

Я работаю в приложении, имеющем ряд простых ванильных компонентов 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, либо любым другим способом?


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


Ответы (1)


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

PropertyConfigurator.configureAndWatch( yourConfigFile, yourReloadInterval);

person digitaljoel    schedule 30.09.2011
comment
Это план Б, который я рассматривал, но проблема в том, что постоянная перезагрузка файла конфигурации может привести к проблемам параллелизма (по крайней мере, так было в некоторых тестах, которые я сделал). - person PNS; 01.10.2011