繁体   English   中英

Log4j2和Jboss EAP 7:异常记录

[英]Log4j2 and Jboss EAP 7: Exceptions logging

我有一个在Jboss EAP 7.0.2上运行的Web应用程序。 在我的应用程序中,我想使用Log4j2进行日志记录。 所以,我添加了log4j2log4j-slf4j-impl作为依赖项:

的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'

把文件放在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.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文件?

您正在从REST端点抛出异常而不处理它。 因此,服务器会为您处理它,无法登录到您的应用程序日志配置。

排除日志记录子系统将阻止日志记录子系统处理您的部署。 (这意味着您不需要那些模块排除)。 但是,服务器本身仍将使用日志记录子系统中的配置。

如果要捕获特定类型的异常,可以使用javax.ws.rs.ext.ExceptionMapper记录异常,然后为其创建响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM