Log4j2 在 JBoss 7.4 上的 JAX-RS servlet 项目中不工作

问题描述 投票:0回答:1

我正在开发一个 JAX-RS servlet 项目,该项目部署在 JBoss (7.4) 服务器上,我想实现 Log4j2 (2.20) 来处理应用程序日志,但是当我使用

info
方法时,它没有显示任何内容在控制台或服务器的
server.log
文件中。

我将 Log4j2 依赖项添加到我项目的

lib
文件夹中。

log4j-api-2.20.0.jar
log4j-core-2.20.0.jar

这是

src\main\resources\log4j2.xml
中Log4j2的配置。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="LogToConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%m%n" />
        </Console>
        <File name="LogToFile" fileName="${sys:jboss.server.log.dir}/server.log" append="true">
            <PatternLayout>
                <Pattern>%m%n</Pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="com.sematext.blog" level="info" additivity="true">
            <AppenderRef ref="LogToConsole"/>
        </Logger>
        <Root level="info">
            <AppenderRef ref="LogToFile"/>
        </Root>
    </Loggers>
</Configuration>

我在

src\main\webapp\WEB-INF\jboss-deployment-structure.xml
文件中排除了 JBoss 日志的模块:

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
            <module name="org.slf4j" />
            <module name="org.apache.commons.logging" />
            <module name="org.log4j" />
            <module name="org.jboss.logging" />
            <module name="org.slf4j.impl" />
            <module name="org.apache.logging.log4j.api" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

这是我正在使用它的课程。

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

public class ExampleServiceImpl implements ExampleService {

    private static final Logger LOGGER = LogManager.getLogger(ExampleServiceImpl.class);

    @GET
    @Path("/getListData")
    @Produces(MediaType.APPLICATION_JSON)
    @Override
    public ExampleResp getListData() {
        LOGGER.info("Inside of getListData method");
        ExampleDAOImpl exampleDAOImpl = new ExampleDAOImpl();
        ExampleResp resp = new ExampleResp();
        resp.setListData(exampleDAOImpl.getData());
        return resp;
    }

}
java jboss jax-rs log4j2 jboss7.x
1个回答
0
投票

你不想尝试使用不同的日志管理器写入

server.log
。两个日志管理器最终可能会覆盖文件,从而导致日志消息丢失或混乱。

log4j2-jboss-logmanager 项目,它将 log4j2 日志消息写入 JBoss 日志管理器。该模块已经存在于 JBoss EAP 7.4 中。这意味着您需要做的就是:

  1. 删除
    jboss-deployment-structure.xml
    或至少删除模块排除
  2. <scope>provided</scope>
    添加到
    org.apache.logging:log4j-api
    Maven 依赖项
  3. 删除
    org.apache.logging:log4j-core

这里不支持用配置文件配置log4j。它使用日志子系统中的配置进行配置。但是,鉴于您的配置,这应该没问题。

© www.soinside.com 2019 - 2024. All rights reserved.