Переопределить ведение журнала в WildFly

Я использовал tomcat и просто переопределил систему ведения журнала по умолчанию. Как включить ведение журнала с логбэком на wildfly в моем весеннем приложении?

Мой Logback.xml работает на tomcat

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
        </encoder>
    </appender>

    <logger name="org.springframework" level="WARN" />
    <logger name="com.citronium.planstery" level="INFO" />
    <logger name="org.apache.http.impl.conn.tsccm" level="ERROR" />

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

person Rinat Mukhamedgaliev    schedule 18.02.2014    source источник
comment
Я не могу точно ответить на ваши вопросы, но я могу дать вам подсказки. Пожалуйста, проверьте эту ветку. Переопределить JBossLogging уже не так просто. С их новой модульной архитектурой загрузки классов переопределение структуры ведения журналов стало довольно накладным. У нас были похожие проблемы, и мы решили использовать комбинацию SLf4J+JBossLogging.   -  person Vikram    schedule 18.02.2014
comment
Максим см. дату. Мой вопрос был ранее   -  person Rinat Mukhamedgaliev    schedule 14.07.2014


Ответы (2)


Вы можете использовать logback для настройки ведения журнала в вашем приложении. Вы не можете использовать logback для настройки ведения журнала для сервера.

Чтобы использовать журнал в вашей конфигурации, вам нужно изменить add-logging-api-dependencies на false или создать jboss-deployment-structure.xml, который исключает подсистему. Вам также необходимо включить logback и slf4j в развертывание.

Первый вариант изменения add-logging-api-dependencies является глобальным параметром для всех развертываний. Следующая команда CLI изменит значение:

/subsystem=logging:write-attribute(name=add-logging-api-dependencies,value=false)

Этот параметр просто не добавляет ни одной из неявных зависимостей журналирования в ваше развертывание.

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

<jboss-deployment-structure>
  <deployment>
     <!-- exclude-subsystem prevents a subsystems deployment unit processors running on a deployment -->
     <!-- which gives basically the same effect as removing the subsystem, but it only affects single deployment -->
     <exclude-subsystems>
        <subsystem name="logging" />
    </exclude-subsystems>
  </deployment>
</jboss-deployment-structure>
person James R. Perkins    schedule 19.02.2014
comment
После использования jboss-deployment-structure.xml я получаю это исключение: Вызвано: java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log; - person Sujoy; 14.08.2014
comment
Убедитесь, что вы включили commons-logging в качестве библиотеки в свое развертывание или добавили явную зависимость org.apache.commons.logging в файл jboss-deployment-structure.xml. Тем не менее, зачем исключать ведение журнала, если вы используете журнал общих ресурсов? - person James R. Perkins; 15.08.2014
comment
Я не пользуюсь общим журналом. Я использую log4j. Моя регистрация вообще не работала. После добавления подсистемы исключения и добавления файла commons-logging.jar в мою войну все заработало. Спасибо, Джеймс. Но я до сих пор этого не понимаю. Где я могу получить больше информации? Везде так запутанно. Я путаюсь. - person Sujoy; 15.08.2014
comment
Есть несколько причин, по которым он может не работать. Все зависит от вашей настройки. Не стесняйтесь опубликовать подробный вопрос community.jboss.org/en/wildfly. WRT commons-log, скорее всего, это требуется одной из ваших зависимостей. - person James R. Perkins; 15.08.2014
comment
может быть, это нужно весне. - person Sujoy; 18.08.2014
comment
Где находится команда /subsystem=logging:write-attribute(name=add-logging-api-dependencies,value=false)? - person John; 16.06.2017
comment
В CLI, например. $JBOSS_HOME/bin/jboss-cli.sh. - person James R. Perkins; 17.06.2017

Вот как мы это делаем, кстати, мы используем wildfly-8.1.0-Final.

Сначала создайте файл jar, содержащий этот класс: https://gist.github.com/xiaodong-xie/219491e0b433f8bd451e

Затем поместите этот jar-файл в «wildfly-8.1.0.Final/modules/system/layers/base/org/jboss/logmanager/main» и добавьте ссылку на этот jar-файл в файл module.xml точно так же. папка.

Затем поместите «logback-classic-1.1.2.jar» и «logback-core-1.1.2.jar» (вы можете использовать любую версию logback по вашему выбору) в «wildfly-8.1.0.Final/modules/system/ layers/base/org/jboss/logmanager/main" и сослаться на эти 2 jar-файла в файле module.xml.

Добавьте следующее в «subsystem: logging» в используемом вами файле standalone.xml:

<custom-handler name="logback" class="org.slf4j.bridge.SLF4JBridgeHandler" module="org.jboss.logmanager"></custom-handler>

И укажите этот обработчик в элементе root-logger следующим образом:

        <root-logger>
            <level name="INFO"/>
            <handlers>
                <handler name="CONSOLE"/>
                <handler name="logback"/>
            </handlers>
        </root-logger>

Вот пример logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>

<appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${JBOSS_HOME}/standalone/log/server-logback.log</file>
    <append>true</append>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="LOGFILE"/>
</appender>
<root level="INFO">
    <appender-ref ref="ASYNC"/>
</root>
</configuration>

И поместите этот файл logback.xml в папку «wildfly-8.1.0.Final/standalone/configuration».

Добавьте следующее в «standalone.sh» или эквивалент в папке «wildfly-8.1.0.Final/bin».

-Dlogback.configurationFile=file:$JBOSS_CONFIG_DIR/logback.xml

Прямо под строкой «-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties». В файле «standalone.sh» есть 2 места.

=================================================================================

Или можно сделать это более простым способом. :)

Поместите 2 jar-файла logback в модуль «jboss.logmanager» и добавьте «-Dorg.jboss.logging.provider=slf4j» в файл «standalone.sh» в той же позиции.

Я обнаружил, что при таком подходе отсутствуют некоторые журналы, поскольку сам Wildfly по-прежнему использует собственное средство ведения журналов, если идет по этому пути.

Радоваться, веселиться. :-)

person Xiaodong Xie    schedule 13.10.2014
comment
Можно ли как-то включить конфигурацию в ваше приложение? Как поместить его в EAR/WAR-файл при доставке? Мне кажется, это правильный путь, если вы отключите свой регистратор через jboss-deployment-structure.xml. - person Robert Heine; 22.10.2015