一、核心概念说明
- SLF4J:日志门面(接口),提供统一的日志调用 API,不负责具体实现。
- Log4j2:日志实现框架,负责日志的输出、格式化等具体功能。
- 关系:SLF4J 作为接口,Log4j2 作为实现,项目中通过 SLF4J 调用,底层由 Log4j2 处理。
二、步骤 1:添加依赖(Maven/Gradle)
需排除 Spring 项目中默认的日志框架(如 Logback),避免冲突,再引入 SLF4J 和 Log4j2 依赖。
SpringBoot Maven 配置(pom.xml):
1 |
|
Spring Maven 配置(pom.xml):
1 | <dependencies> |
三、步骤 2:配置 log4j2.xml 文件
将你提供的配置文件放在项目的 src/main/resources 目录下(Spring 会自动扫描该路径下的日志配置文件)。
配置文件说明(基于你的配置):
1 |
|
四、步骤 3:在代码中使用日志
通过 SLF4J 的 LoggerFactory 获取日志对象,调用日志方法(与具体实现解耦)。
示例代码(Spring 组件中使用):
1 | import org.slf4j.Logger; |
五、验证配置是否生效
- 启动项目:Spring 会自动加载
log4j2.xml,并在控制台输出日志。 - 检查日志文件:项目根目录下会生成
logs文件夹,包含app-info.log和app-error.log。 - 测试日志级别:
DEBUG级别日志:仅在控制台输出(因为Console的级别是DEBUG)。INFO级别日志:同时输出到控制台和app-info.log。ERROR级别日志:同时输出到控制台、app-info.log和app-error.log。
六、常见问题解决
- 日志不输出:
- 检查依赖是否冲突(确保已排除 Logback,且 Log4j2 依赖正确)。
- 确认
log4j2.xml路径是否正确(必须在src/main/resources下)。 - 检查日志级别:若代码中调用
logger.debug(),但Logger或Appender的级别高于DEBUG(如INFO),则不会输出。
- 日志文件不生成:
- 检查
LOG_PATH路径是否有权限写入(例如 Linux 下需确保应用对logs文件夹有写权限)。 - 尝试使用绝对路径(如
D:/logs/或/var/logs/)避免相对路径问题。
- 检查
- 第三方框架日志过多:
- 在
<Loggers>中添加对应包的Logger配置,降低级别(如 Spring 设为WARN,MyBatis 设为INFO)。
- 在
通过以上步骤,即可在 Spring 项目中正确配置并使用 SLF4J + Log4j2,实现日志的控制台输出和文件滚动存储。