Странная ошибка консоли jboss - PullRequest
13 голосов
/ 29 марта 2010

Я создаю дополнительный модуль для уже много-модульного проекта Maven. И для этого я хочу, чтобы все было как в других модулях (имеется в виду зависимости), просто чтобы проверить привет, тогда я пойду делать более сложные вещи. И он выводит hello world так, как должен при развертывании на сервере 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 [BaseClassLoader@9a8d9b{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 [org.jboss.bootstrap.NoAnnotationURLClassLoader@506411].
15:48:35,790 ERROR [STDERR] log4j:ERROR Could not instantiate appender named "FILE".

Вот часть Appender xml

http://pastebin.com/X7Dgdrki

Ответы [ 2 ]

18 голосов
/ 29 марта 2010

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

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

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

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

Что касается log4j.jar, я имею в виду, что если он присутствует в вашей войне, он (и копия org.apache.log4j.Appender) загружается загрузчиком классов войны (BaseClassLoader@9a8d9b в вашем сообщении об ошибке). И это вызывает конфликт загрузчика классов. Так что, если вы не развернете log4j.jar с вашей войной, ошибка может исчезнуть. Это связано с Maven только в том, что зависимость настроена в вашем pom. Для этого небольшого эксперимента вы можете просто удалить log4j.jar из вашей войны вручную; если это решает проблему, настройте зависимость log4j в pom как «предоставленную», например ::

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

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

3 голосов
/ 10 ноября 2011

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

...