Мой проект упакован как файл EAR, содержащий API SLF4J (1.7.5), а также библиотеки журналов в качестве его реализации (logback-core 1.0.13
и logback-classic 1.0.13
).SLF4J - Привязки перезаписываются другими приложениями на том же сервере приложений
Когда я использовал (используется) для развертывания моего проекта SLF4J's LoggerFactory находит логин как возможную привязку и используется правильный регистратор (т. Е. Журнал).
Теперь у меня есть коннектор ресурсов (activemq-rar-5.8.0.rar
), который развертывается перед моим собственным EAR-файлом (поскольку файлы EAR требуют RAR). К сожалению, этот RAR содержит собственную реализацию SLF4J (slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
log4j-1.2.17.jar
). Файлы RAR используют реализацию log4j.
Когда я развертываю свой EAR-файл, LoggerFactory внутри кода моего приложения внезапно использует реализацию log4j (org.slf4j.impl.Log4jLoggerAdapter
) - хотя я ожидал, что путь к классам будет отделен от RAR.
Это не похоже на то, что я делаю неправильно (RAR должен использовать log4j, мой EAR должен использовать logback)?
Update 1: It doesn't look as if I am alone, но, к сожалению, ответ отсутствует ..
Update 2:
Согласно this таблице, GlassFish загружает модуль разъема перед EAR/WAR libs (которые являются последними загружаемыми libs).
Update 3:
мне удалось зафиксировать "привязку": Если бы я поставил slf4j-api-1.7.5.jar
и реализацию Logback (logback-core-1.0.13.jar
и logback-classic-1.0.13.jar
) внутри domains/<myDomain>/lib
папки в GlassFish, будет использоваться Logback как реализация журнала (см. «Обновление 2» - «Common Classloader» появляется перед «Connector Classloader»).
К сожалению, мои конфигурационные файлы больше не найдены, поскольку они находятся внутри WAR/EAR, которые позже будут загружены другим загрузчиком классов («Archive Classloader»).
Так что это не решение для меня, так как я хотел бы сохранить файлы конфигурации журнала в EAR/WAR (так как каждое приложение использует другую конфигурацию).
С наилучшими пожеланиями
stupidSheep
Почему пакет log4j в зависимости? Не может ли контейнер следить за конфигурацией ведения журнала и предоставлять им? – roby
Я не собираю log4j как зависимость самостоятельно. Он находится в RAR (адаптере ресурсов), который выполняется Apache ActiveMQ (http://activemq.apache.org/maven/5.8.0/activemq-rar/dependencies.html). Эти JAR-файлы находятся внутри RAR вместе с некоторыми файлами конфигурации журнала. – stupidSheep