Log4j2 не загружается из внешнего classpath в EAR - PullRequest
0 голосов
/ 29 января 2020

Структура артефакта проекта:

test.ear
--lib - has all log4j2 jars core, web, bridge and JCL
--META-INF -- has app.xml, JBoss specific deployment XML, and manifest file 
--a.war -- each war has web.xml with log4jConfiguration and Log4jServletContextListener specified.
--b.war
--c.war

Война создает контекст с log4jConfiguration, который является "classpath: test. xml". Я вижу, как каждая война создает контекст с помощью log4jContextName, который я предоставил в сети. xml. У меня тоже есть несколько крон, которые работают на основе настроенных временных интервалов. Когда выполняются кроны и запускаются многие процессы JMS, я заметил, что файлы журналов не заполнены журналами (из классов, определенных для проекта c). Проходя через код log4j2, я понял, что log4j2 создает контекст для каждого загрузчика классов. И в моем случае это создает контекст для «test.ear», который по умолчанию имеет значение error (DefaultContext), так как не может найти log4j2 по умолчанию. xml, поскольку у меня есть пользовательское имя (test. xml). ) в классовой дорожке. Log4jServletContextListener не перехватывает событие «test.ear».

Как вставить мой "classpath: test. xml", пока log4j2 создает контекст для файла ear? Поскольку мой проект может быть развернут как в WebSphere, так и в JBoss, я с нетерпением жду предложений, которые не зависят от сервера c. Или есть способ как-то создать единый контекст для всей войны и ушей? У меня есть разные приложения за пределами этого уха на одном сервере, поэтому я не могу указать конфигурацию среды -Dlog4j.configurationFile, так как другие приложения имеют собственные log4j2 xml.

1 Ответ

0 голосов
/ 29 января 2020

Один из подходов, который я могу придумать, - это поместить тестовый файл конфигурации log4j. xml в общую библиотеку и настроить приложение на использование общей библиотеки.

Следующая ссылка описывает, как настроить общая библиотека для сервера или корпоративного приложения в WebSphere.

https://www.ibm.com/support/pages/how-create-shared-library-and-associate-it-application-server-or-enterprise-application-websphere-application-server

Общая библиотека должна быть общей c функцией для современного Java приложения серверы, поэтому JBoss также должен быть в состоянии настроить это.

...