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

Logback и Jboss 7 - не работают вместе?

У меня возникла любопытная проблема. У меня было это приложение Java, которое ранее было развернуто в tomcat и с радостью использовало классический журнал в качестве реализации slf4j. Теперь, когда мы попытались развернуть одно и то же приложение на сервере jboss 7.1.final, он даже не развертывает приложение maoning java.lang.ClassCastException: org.slf4j.impl.Slf4jLoggerFactory cannot be cast to ch.qos.logback.classic.LoggerContext Это оскорбительная строка кода

final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();

Класс, который имеет его spring, вводится, и это не работает - следовательно, все приложение не может быть развернуто. Кто-нибудь получил решение? Спасибо заранее

Посмотрев на этом сайте плюс другие форумы, я понял, что Jboss 7 поставляется с его собственной реализацией slf4j и реализует тот же интерфейс ILoggerFactory, что и LoggerContext в logback. Наше приложение попыталось получить экземпляр того же самого, но сервер приложений навязывает ему собственную реализацию slf4j.

Я попытался изменить module.xml в jboss\modules\org\slf4j\impl\main и указал его на баннеры журнала.

<resources>
    <resource-root path="logback-classic-0.9.28.jar"/>
    <resource-root path="logback-core-0.9.28.jar"/>
</resources>

Теперь, когда я запускаю приложение, я получаю серьезную ошибку

Exception starting filter WicketFilter: java.lang.ClassCastException: ch.qos.logback.classic.LoggerContext cannot be cast to ch.qos.logback.classic.LoggerContext

Я нахожусь на своем пути. Любые эксперты jboss и logback могут помочь? Спасибо заранее

4b9b3361

Ответ 1

Вам нужно исключить версию slf4j сервера из вашего развертывания. Создайте файл jboss-deployment-structure.xml и поместите его в каталог WARS META-INF или WEB-INF.

Содержимое файла должно выглядеть следующим образом:

<jboss-deployment-structure>
    <deployment>
        <!-- Exclusions allow you to prevent the server from automatically adding some dependencies     -->
        <exclusions>
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

Ответ 2

Если вы используете мосты для jul или jcl в своем приложении, вы также должны их исключить:

        <module name="org.slf4j" />
        <module name="org.slf4j.jcl-over-slf4j" />
        <module name="org.slf4j.impl" />
        <module name="org.jboss.logging.jul-to-slf4j-stub" />

Ответ 3

Существует альтернативный подход:

  • У вас есть регистрация, настроенная в вашей войне.
  • у вас есть все зависимости в вашей войне.
  • вы ничего не настраиваете в каталоге сервера JBoss, даже дополнительные модули JBoss

Просто отключите ведение журнала JBoss полностью и полагайтесь на зависимости в вашей войне. Измените jboss-deployment-structure.xml следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
    <deployment>
        <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" />
            <module name="org.slf4j.jcl-over-slf4j" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

После развертывания вашего приложения журнал загрузки (boot.log) продолжает работать, также server.log будет показывать журнал развертывания. Но все ваше приложение регистрируется через ваш (в этом примере) slf4j + logback в вашей войне.

Обратите внимание, что вам не нужно запускать JBoss с помощью -Dorg.jboss.logging.provider=slf4j, если вы укажете это, вам нужно будет предоставить модули JBoss (обычно slf4j-api, logback-classic и logback-core), но это не стоит поскольку журнал JBoss теперь используется только для загрузки (boot.log) и для информации о развертывании (server.log).

Литература:
http://tinyapps.blogspot.com/2013/01/getting-logback-and-slf4j-to-work-in.html
fooobar.com/info/150867/...