Структура артефакта проекта:
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.