在Java项目中使用Log4j2实现日志记录,需要先完成框架依赖的引入,再正确设置配置文件路径,才能让日志功能正常工作。不同的项目构建方式对应的依赖引入方法不同,配置文件的放置位置和加载逻辑也有明确规则。

一、Log4j2依赖引入
1. Maven项目引入依赖
如果是Maven管理的项目,直接在pom.xml中添加Log4j2的核心依赖即可,不需要额外引入其他日志桥接包,Log4j2已经实现了完整的日志功能。
<dependencies>
<!-- Log4j2核心依赖 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.20.0</version>
</dependency>
</dependencies>
2. 普通Java项目引入依赖
如果是没有使用构建工具的普通Java项目,需要手动下载Log4j2的jar包,放到项目的lib目录下,然后添加到项目的构建路径中。需要下载的两个核心jar包是log4j-api-2.x.x.jar和log4j-core-2.x.x.jar,x为具体的版本号。
二、Log4j2配置文件编写
Log4j2的配置文件支持XML、JSON、YAML、Properties等多种格式,最常用的是XML格式。配置文件需要定义日志的输出级别、输出位置、输出格式等内容。
以下是一个基础的XML格式配置文件示例,实现了将日志输出到控制台和文件的功能:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<!-- 控制台输出 -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 文件输出 -->
<File name="File" fileName="logs/app.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
三、配置文件路径设置
Log4j2会自动扫描指定路径下的配置文件,默认情况下会按照以下顺序查找配置文件:
- 查找系统属性log4j2.configurationFile指定的路径
- 在classpath下查找log4j2-test.xml
- 在classpath下查找log4j2.xml
- 在classpath下查找log4j2-test.json或者log4j2-test.jsn
- 在classpath下查找log4j2.json或者log4j2.jsn
- 在classpath下查找log4j2-test.properties
- 在classpath下查找log4j2.properties
1. Maven项目配置文件路径
Maven项目的资源文件默认放在src/main/resources目录下,所以只需要将编写好的log4j2.xml文件放到src/main/resources目录下,打包后文件会自动进入classpath,Log4j2可以自动加载到配置文件。
2. 普通Java项目配置文件路径
普通Java项目需要将配置文件放到src目录下,或者放到编译后的class输出目录下,保证文件在classpath中即可。如果需要自定义配置文件路径,可以通过设置系统属性的方式指定:
public class LogTest {
public static void main(String[] args) {
// 设置自定义配置文件路径,路径为绝对路径或者相对于项目根目录的路径
System.setProperty("log4j2.configurationFile", "config/log4j2.xml");
// 获取日志对象
org.apache.logging.log4j.Logger logger = org.apache.logging.log4j.LogManager.getLogger(LogTest.class);
// 输出测试日志
logger.info("Log4j2配置测试成功");
}
}
四、验证配置是否生效
完成依赖引入和配置文件设置后,可以编写简单的测试代码验证日志是否正常输出:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LogDemo {
// 获取当前类的日志对象
private static final Logger logger = LogManager.getLogger(LogDemo.class);
public static void main(String[] args) {
logger.trace("这是trace级别的日志");
logger.debug("这是debug级别的日志");
logger.info("这是info级别的日志");
logger.warn("这是warn级别的日志");
logger.error("这是error级别的日志");
}
}
如果控制台输出了info及以上级别的日志,同时logs目录下生成了app.log文件并写入了对应日志,说明Log4j2环境配置成功。