Ошибка с JMS Appender в Log4j2 при переходе на Wildfly 14 - PullRequest
0 голосов
/ 11 января 2019

Использование Log4j2 2.11.1 с Wildfly 14.0.1, OpenJDK 11. У нас есть пользовательское клиентское приложение OSGi, которое регистрирует как приложение для консоли, так и приложение JMS для отправки событий регистрации на сервер Wildfly.

До Log4j2 мы программно вставляли JMS-приложение в нашу конфигурацию Log4j, которая работала нормально. В этом действительно не было необходимости, поэтому с нашим недавним обновлением до Log4j2 я пытаюсь использовать конфигурацию log4j2.xml, чтобы справиться со всем этим и упростить наш код.

У нас есть клиентский класс, который успешно подключается к нашей Wildfly JMS и получает сообщения, используя следующее:

  topicConnFacName: com.rsc.mmpl.TopicConnectionFactory
  initialContextFacName: org.jboss.naming.remote.client.InitialContextFactory
  URL: http-remoting://JDEVDWS166:9090
  Topic name: com.rsc.mmpl.MsgHndlrTopic

Моя конфигурация log4j2.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%p %d{yyyy-MMM-dd HH:mm:ss.SSS} %c{3}[line %L] - %m%n"/>
    </Console>
    <JMS name="jmsQueue" destinationBindingName="com.rsc.mmpl.MsgHndlrTopic"
         factoryName="org.jboss.naming.remote.client.InitialContextFactory"
         factoryBindingName="com.rsc.mmpl.TopicConnectionFactory"
         ignoreExceptions="false"
         providerURL="http-remoting://JDEVDWS166:9090">
         <JsonLayout properties="true" complete="true"/>
    </JMS>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="jmsQueue"/>
    </Root>
  </Loggers>
</Configuration>

Если я закомментирую мой JMS Appender, он будет работать нормально, поэтому я знаю, что мой log4j настроен правильно с точки зрения пути к классам (ядра jar log4j и api, а также файлы jaxon и jboss-client.jar все включены общий путь к классам).

Однако при запуске моего клиентского приложения с JMS Appender я получаю следующую ошибку:

[stderr] Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.jboss.remoting3.ConfigurationEndpointSupplier$Holder
[stderr]    at org.jboss.remoting3.ConfigurationEndpointSupplier.get(ConfigurationEndpointSupplier.java:84)
[stderr]    at org.jboss.remoting3.ConfigurationEndpointSupplier.get(ConfigurationEndpointSupplier.java:40)
[stderr]    at org.wildfly.common.context.ContextManager.getPrivileged(ContextManager.java:286)
[stderr]    at org.jboss.remoting3.Endpoint.getCurrent(Endpoint.java:81)
[stderr]    at org.wildfly.naming.client.remote.RemoteNamingProviderFactory.getEndpoint(RemoteNamingProviderFactory.java:49)
[stderr]    at org.wildfly.naming.client.remote.RemoteNamingProviderFactory.supportsUriScheme(RemoteNamingProviderFactory.java:40)
[stderr]    at org.wildfly.naming.client.WildFlyRootContext.getProviderContext(WildFlyRootContext.java:784)
[stderr]    at org.wildfly.naming.client.WildFlyRootContext.lookup(WildFlyRootContext.java:140)
[stderr]    at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
[stderr]    at org.apache.logging.log4j.core.net.JndiManager.lookup(JndiManager.java:172)
[stderr]    at org.apache.logging.log4j.core.appender.mom.JmsManager.createConnection(JmsManager.java:323)
[stderr]    at org.apache.logging.log4j.core.appender.mom.JmsManager.<init>(JmsManager.java:250)
[stderr]    at org.apache.logging.log4j.core.appender.mom.JmsManager.<init>(JmsManager.java:54)
[stderr]    at org.apache.logging.log4j.core.appender.mom.JmsManager$JmsManagerFactory.createManager(JmsManager.java:130)
[stderr]    at org.apache.logging.log4j.core.appender.mom.JmsManager$JmsManagerFactory.createManager(JmsManager.java:125)
[stderr]    at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:113)
[stderr]    at org.apache.logging.log4j.core.appender.mom.JmsAppender$Builder.build(JmsAppender.java:118)
[stderr]    at org.apache.logging.log4j.core.appender.mom.JmsAppender$Builder.build(JmsAppender.java:50)
[stderr]    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:123)
[stderr]    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:959)
[stderr]    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:899)
[stderr]    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:891)
[stderr]    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:514)
[stderr]    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:238)
[stderr]    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250)
[stderr]    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:547)
[stderr]    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:619)
[stderr]    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:636)
[stderr]    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:231)
[stderr]    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:243)
[stderr]    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
[stderr]    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
[stderr]    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:648)
[stderr]    at com.rsc.delphi.logger.log4j.Log4jLogger.<init>(Unknown Source)
[stderr]    ... 20 more

Глядя на источник Holder, кажется, что что-то не так со статическим блоком там, но я не могу понять, на что я способен.

Есть ли способ получить больше информации, чтобы выяснить, что здесь не так? Опять же, программное подключение к моей Wildfly JMS в порядке, похоже, проблема с Log4j2.

Заранее спасибо.

1 Ответ

0 голосов
/ 11 января 2019

Глядя на это, я думаю, что эта проблема не лежит на вершине трассировки стека. Эта проблема загрузки классов, вероятно, возникает из-за того, что log4j2 получает соединение с WildFly интерфейсом именования.

Похоже, новый InitialContextFactory (подкласс) модуль теперь предоставляется . Это означает, что вам придется изменить:

org.jboss.naming.remote.client.InitialContextFactory

Кому:

org.wildfly.naming.client.WildFlyInitialContextFactory

Не смотря на это слишком глубоко, похоже, что new ICF имеет немного более причудливую логику для обработки ClassLoader проблем, чем old ICF. ..

...