Log4j2 и Jboss EAP 7: Регистрация исключений


У меня есть веб-приложение, работающее на Jboss EAP 7.0.2. В моем приложении я хочу использовать Log4j2 для ведения журнала. Итак, я добавил log4j2 и log4j-slf4j-impl в качестве зависимостей:

Строить.gradle

compile 'org.apache.logging.log4j:log4j-core:2.7'
compile 'org.apache.logging.log4j:log4j-api:2.7'
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.7'

Put file jboss-deployment-structure.xml :

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <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>

Создан log4j2.xml (я опускаю его содержимое, но он записывает журнал в файл lea.журнал ).

Также у меня есть TestRestService

@Path("/test")
public class TestRestService {
    private Logger logger  = LogManager.getFormatterLogger(TestRestService.class);
    private org.slf4j.Logger slf4jLogger = LoggerFactory.getLogger(TestRestService.class);

    @GET
    @Path("/logger")
    public void testLogger() {
        logger.info("Log4j2 log");
        slf4jLogger.info("SLF4J log");
        throw new RuntimeException("Test");
    }
}

Этот метод тестирования записывает в lea.log:

2016-11-07 15:25:37.673 [default task-7] INFO  ru.rshb.test.TestRestService - Log4j2 log
2016-11-07 15:25:37.673 [default task-7] INFO  ru.rshb.test.TestRestService - SLF4J log

Но это не регистрирует исключение!

В сервере.журнал я вижу:

2016-11-07 15:25:37,673 INFO  [stdout] (default task-7) INFO  - Log4j2 log

2016-11-07 15:25:37,673 INFO  [stdout] (default task-7) INFO  - SLF4J log

2016-11-07 15:25:37,674 ERROR [io.undertow.request] (default task-7) UT005023: Exception handling request to /lea-core/rest/test/logger: org.jboss.resteasy.spi.UnhandledException: java.lang.RuntimeException: Test
...

Вопросы:

  1. Как я могу направлять все сообщения и исключения, которые произошли в моем приложении, в lea.log (мой лог-файл log4j2)?
  2. предполагает ли он войти на сервер.файл журнала, даже если я исключил подсистему ведения журнала из своего развертывания?
1 3

1 ответ:

Вы создаете исключение из конечной точки REST и не обрабатываете его. Поэтому сервер обрабатывает его за вас, который не может войти в конфигурацию журнала ваших приложений.

Исключение подсистемы ведения журнала остановит обработку развертывания подсистемой ведения журнала. (Что означает, что вам не нужны эти исключения модулей). Однако сам сервер все равно будет использовать конфигурацию из подсистемы ведения журнала.

Если вы хотите перехватывать исключения из определенного тип вы могли бы использовать a javax.ws.rs.ext.ExceptionMapper чтобы зарегистрировать исключение, создайте для него ответ.