2016-11-07 5 views
3

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

build.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 файл JBoss развертывания-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.log).

Кроме того, у меня есть 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 

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

В server.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. Предполагается ли он регистрироваться в файле server.log, даже если я исключил подсистему ведения журнала из моего развертывания?

ответ

0

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

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

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

+0

Благодарим вас за ответ. Мне не нравятся все исключения в моем приложении. То, что я пытаюсь достичь, - это использовать функцию ведения журнала маршрутизации Log4j2 (или SiftingAppernder, как это называется в журнале). По моему мнению, в подсистеме регистрации по умолчанию нет просеивающих функций. Поэтому, я думаю, лучший вариант для меня будет включать Logback в качестве рамки ведения журнала сервера (как описано здесь [http://blog.anotheria.net/devops/enable-logback-in-jboss/], для пример). Это правильно? – 3biga

+0

Это может работать для самого WildFly, но если другие зависимости используют log4j или JUL, вы можете не получить эти сообщения журнала, направленные на logback. –

+0

Хорошо, спасибо вам за помощь! – 3biga

Смежные вопросы