2013-08-20 5 views
2

У меня есть настройка JGroups с более чем одним стек протоколов JGroups (например, один для сервера приложений, здесь JBoss EAP5 и один для настраиваемого приложения).Настройка уровня протокола протокола JGroups для данного экземпляра протокола

Я ищу, чтобы установить уровень протокола протокола JGroups на заданный уровень, но только для данного экземпляра протокола, а не для глобального регистратора. То есть Я хочу установить уровень журнала, но только для стека протоколов, а не для другого стека протоколов. Это используется для отладки моего настраиваемого стека протоколов JGroups.

Я начал устанавливать уровень журнала глобально для данного протокола в конфигурации ведения журнала (log4j), но он активен для всех стеков протоколов. Таким образом, создается большое количество сообщений регистрации.

Затем я попробовал более тонкий подход: суперкласс всех протоколов JGroups Protocol имеет метод setLevel, который может использоваться для установки уровня ведения журнала (который можно настроить либо программно, либо через файл конфигурации XML). Поскольку Protocol.setLevel(String) доступен только от JGroups 2.8.0, я изолировал загрузчик классов EAR, чтобы переопределить JGroups 2.6.20 с сервера JBoss EAP5. Но эффект такой же, как и при глобальной конфигурации: уровень журнала установлен для всех стеков протоколов.

Есть ли способ настроить уровень ведения JGroups для данного протокола для данного протоколаStack? Если да, как это сделать?

ответ

2

Вы не можете этого сделать, потому что регистратор привязан к имени класса, а не к загрузчику классов.

Однако есть некоторые обходные пути:

  • Добавить <TRACE/> или <HDRS/> протокола на нижней часть стеки протоколов в файле jgroups.xml конфигурации (т.е. в конце файла): это будет отображать любые Event посланные к протоколу вверх или вниз на System.out.
  • Установите атрибут print_local_addr на номер true в протоколе GMS: при этом будет отображаться местный адрес на System.out.
Смежные вопросы