2017-02-08 14 views
0

amqps(RabbitMQ client) jar требует включения slf4j-log4j12 или же он бросает NoSuchMethodError в журналы. Итак, я добавил его к pom.xml. Теперь журнал запущен в jboss 5.1, все журналы приложений теперь регистрируются в файле console/server.log.Добавление slf4j-log4j12 началось с регистрации на server.log

Мы используем ведение журнала по умолчанию jboss для всех наших приложений, которые находятся в папке DOMAIN/log.

Ошибка, когда банки не включены в приложение

Constructor threw exception; nested exception is java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder; 

POM

<dependency> 
      <groupId>com.rabbitmq</groupId> 
      <artifactId>amqp-client</artifactId> 
      <version>4.0.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.7.21</version> 

     </dependency> 

ответ

0

Это означает, что более чем на зависимость тянет другую версию SLF4J. Погрузчик класса загружает версию, которая не имеет метода StaticLoggerBinder.getSingleton(). Чтобы проверить, какие зависимости тянут в разных версиях использование SLF4J Maven зависимостей: дерево

Точная команда

МВН зависимость: дерево -DoutputFile =/somepath/file.txt

последние Maven зависит от:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.7</version> 
</dependency> 
+0

Как исправить мой журнал моего jboss? Это похоже на то, что slf4j 1.7.x используется сквозным после того, как я положил зависимость в pom. – Zeus

0

вы должны будете исключить возможность регистрации услуг по умолчанию из jboss.

Для этого вы можете добавить файл jboss-deployment-structure.xml в свой WEB-INF для JAR или WAR на META-INF для EAR.

В котором вы можете добавить следующее:

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2"> 
    <deployment> 
     <exclude-subsystems> 
      <subsystem name="logging" /> 
     </exclude-subsystems> 
     <exclusions> 
      <module name="org.apache.commons.logging" /> 
      <module name="org.apache.log4j" /> 
      <module name="org.jboss.logging" /> 
      <module name="org.jboss.logging.jul-to-slf4j-stub" /> 
      <module name="org.jboss.logmanager" /> 
      <module name="org.jboss.logmanager.log4j" /> 
      <module name="org.slf4j" /> 
      <module name="org.slf4j.impl" /> 
     </exclusions> 
    </deployment> 
</jboss-deployment-structure> 

не забудьте добавить файл XML в вашем пути к классам (например, даны для EAR):

   <plugin> 
        <artifactId>maven-ear-plugin</artifactId> 
        <version>2.8</version> 
        <configuration> 
         <defaultLibBundleDir>lib</defaultLibBundleDir> 
         <earSourceDirectory>ear</earSourceDirectory> 
         <earSourceIncludes>META-INF/*</earSourceIncludes> 
         <modules> 
          <webModule> 
           <groupId>your group id</groupId> 
           <artifactId>your artifact</artifactId> 
           <contextRoot>/yourcontext</contextRoot> 
          </webModule> 
         </modules> 
        </configuration> 
       </plugin> 

Затем протоколирование должно быть работая при условии, что вы добавляете правильные зависимости в свой pom.xml и используете правильный регистратор в своем приложении.

+0

Эй, Том, мне все еще нравится использовать Jboss по умолчанию, я хотел бы, чтобы slf4j прекратил вход в консоль jboss/server.log – Zeus

+0

, это решение не останавливает работу по умолчанию из-за работы. У вас всегда будет файл server.log. То, что он делает, позволяет вашему отдельному файлу содержать только выбранную вами регистрацию приложений. – Tom