Подтвердить что ты не робот

Странная ошибка консоли jboss

Я создаю дополнительный модуль для уже мультимодульного проекта maven. И для этого я хочу, чтобы все было похоже на другие модули (означая зависимости), чтобы просто проверить мир привет, тогда я пойду сделать еще более сложный материал. И он печатает привет мир, как он должен быть развернут на сервере jboss, но я получаю странную ошибку на консоли, если бы кто-нибудь имел подобный опыт? и как я могу это исправить? Вот он:

15:48:35,789 ERROR [STDERR] log4j:ERROR A "org.jboss.logging.appender.FileAppender" object is not assignable to a "org.apache.log4j.Appender" variable.
15:48:35,789 ERROR [STDERR] log4j:ERROR The class "org.apache.log4j.Appender" was loaded by 
15:48:35,790 ERROR [STDERR] log4j:ERROR [[email protected]{vfszip:/C:/jboss-5.1.0.GA/server/default/deploy/new-module-0.0.1-SNAPSHOT.war/}] whereas object of type 
15:48:35,790 ERROR [STDERR] log4j:ERROR "org.jboss.logging.appender.FileAppender" was loaded by [[email protected]].
15:48:35,790 ERROR [STDERR] log4j:ERROR Could not instantiate appender named "FILE".

Вот часть Appender xml

http://pastebin.com/X7Dgdrki

4b9b3361

Ответ 1

Сначала проверьте <server>/conf/jboss-log4j.xml конфигурацию appender с именем FILE (и опубликуйте здесь, если можете, - это может дать нам больше подсказок).

Дальнейшее исследование показывает, что org.jboss.logging.appender.FileAppender фактически реализует интерфейс org.apache.log4j.Appender. Таким образом, это, по-видимому, конфликт классов. Такое же определение класса (в данном случае org.apache.log4j.Appender) при загрузке двумя разными загрузчиками классов считается как два разных класса для JVM.

Включен ли log4j.jar в вашу войну или в ваш каталог server/lib? Если это так, вы можете попробовать удалить его и посмотреть, разрешает ли он проблему.

Обновление: На самом деле самым простым решением является простое изменение типа appender на org.apache.log4j.FileAppender в jboss-log4j.xml.

Что касается log4j.jar, я имею в виду, что если он присутствует в вашей войне, он (и копия org.apache.log4j.Appender) загружается загрузчиком классов war ([email protected] в сообщении об ошибке). И это вызывает конфликт классов. Поэтому, если вы не развертываете log4j.jar с вашей войной, ошибка может исчезнуть. Это связано с Maven только тем, что зависимость настроена в вашем pom. Для этого небольшого эксперимента вы можете просто удалить log4j.jar из своей войны вручную; если это решает проблему, настройте зависимость log4j в своей папке как "предоставленную", например:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
        <scope>provided</scope>
    </dependency>

Если log4j.jar не находится в вашей войне, он все равно может находиться в каталоге server/default/lib - пожалуйста, проверьте это, и если он есть, попробуйте удалить его.

Ответ 2

Недавно мы столкнулись с этой проблемой. Мы попробовали предложения выше, и они не сработали. Таким образом, мы справились с этой проблемой, заменив все log4j import абстрактным интерфейсом ведения журнала (для этого мы выбрали org.apache.commons.logging) и удалили log4j из depdenancies. Затем происходит то, что фактическая базовая реализация ведения журнала поддерживает все, что установил JBoss. И если мы хотим вернуться к Tomcat (без JBoss), мы можем просто добавить банку log4j или любую другую логическую реализацию обратно в войну.