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。必须显式排除,否则运行时报错或日志不输出:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 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)。
- 最小可用 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"></patternlayout><br> </console><br> </appenders><br> <loggers><br> <root level="info"><br> <appenderref ref="Console"></appenderref><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 的调用,无需修改原有日志语句。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










