我正在开发一个 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;
}
}
你不想尝试使用不同的日志管理器写入
server.log
。两个日志管理器最终可能会覆盖文件,从而导致日志消息丢失或混乱。
有 log4j2-jboss-logmanager 项目,它将 log4j2 日志消息写入 JBoss 日志管理器。该模块已经存在于 JBoss EAP 7.4 中。这意味着您需要做的就是:
jboss-deployment-structure.xml
或至少删除模块排除<scope>provided</scope>
添加到org.apache.logging:log4j-api
Maven 依赖项org.apache.logging:log4j-core
这里不支持用配置文件配置log4j。它使用日志子系统中的配置进行配置。但是,鉴于您的配置,这应该没问题。