Log4j2 是 Apache 提供的高性能日志框架,支持异步日志、插件化架构和灵活配置,集成需三步:引入依赖(log4j-api/core 或 log4j-slf4j2-impl)、排除旧日志实现(如 Logback、log4j1.x)、配置 log4j2.xml 文件(如控制台输出示例),代码中按 SLF4J 标准使用即可。

Log4j2 是 Apache 提供的高性能日志框架,相比 Log4j 1.x 和 Logback,它支持异步日志、插件化架构、更灵活的配置方式,并且线程安全、性能更好。在项目中集成 Log4j2,核心是三步:引入依赖、排除旧日志实现、配置文件。
添加 Log4j2 依赖(Maven)
在 pom.xml 中加入 Log4j2 的核心包和与 SLF4J 的桥接器(如果项目用 SLF4J API):
- 若项目直接使用 Log4j2 API:
<dependency><br> <groupId>org.apache.logging.log4j</groupId><br> <artifactId>log4j-core</artifactId><br> <version>2.20.0</version><br> </dependency><br> <dependency><br> <groupId>org.apache.logging.log4j</groupId><br> <artifactId>log4j-api</artifactId><br> <version>2.20.0</version><br> </dependency> - 若项目已用 SLF4J(推荐),需桥接并排除其他日志绑定:
<dependency><br> <groupId>org.apache.logging.log4j</groupId><br> <artifactId>log4j-slf4j2-impl</artifactId><br> <version>2.20.0</version><br> </dependency>
同时确保 排除掉 slf4j-log4j12、logback-classic、slf4j-jdk14 等其他绑定实现,避免冲突。
移除或排除旧日志依赖
Spring Boot 项目默认带 Logback,传统 Spring 项目可能含 log4j 1.x 或 commons-logging。必须显式排除,否则运行时报错或日志不输出:
- Spring Boot 中,在 spring-boot-starter-web 等 starter 下 exclude:
<exclusions><br> <exclusion><br> <groupId>org.springframework.boot</groupId><br> <artifactId>spring-boot-starter-logging</artifactId><br> </exclusion><br> </exclusions> - 检查 Maven 依赖树:
mvn dependency:tree | grep logging,确认无重复或冲突日志实现。
配置 Log4j2(log4j2.xml 或 log4j2.json)
将配置文件放在 src/main/resources/ 目录下,Log4j2 默认自动加载 log4j2.xml(优先级高于 .json/.yaml)。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
立即学习“Java免费学习笔记(深入)”;
- 最小可用 XML 示例(控制台输出):
<?xml version="1.0" encoding="UTF-8"?><br> <Configuration status="WARN"><br> <Appenders><br> <Console name="Console" target="SYSTEM_OUT"><br> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/><br> </Console><br> </Appenders><br> <Loggers><br> <Root level="info"><br> <AppenderRef ref="Console"/><br> </Root><br> </Loggers><br> </Configuration> - 如需文件输出,加一个
RollingFileAppender 并配置TimeBasedTriggeringPolicy实现按天归档。 - 注意:配置文件名必须严格为 log4j2.xml(大小写敏感),且不能有拼写错误,否则 Log4j2 会退回到默认简易日志(仅输出 warn/error 到控制台)。
代码中使用(SLF4J 方式)
只要依赖和配置正确,直接按 SLF4J 标准写法即可,无需改动业务代码:
import org.slf4j.Logger;<br> import org.slf4j.LoggerFactory;private static final Logger log = LoggerFactory.getLogger(YourClass.class);log.info("User {} logged in", userId); // 支持参数占位,不拼接字符串
Log4j2 的 slf4j2-impl 会自动接管所有 SLF4J 的调用,无需修改原有日志语句。

















