SLF4J是Java日志门面,不实现日志功能而桥接Logback、Log4j等底层框架,实现解耦与灵活切换;常用Logback绑定,需引入slf4j-api和logback-classic依赖;通过LoggerFactory获取Logger,用{}占位符记录日志;配置logback.xml或Spring Boot的application.properties即可定制输出。

SLF4J(Simple Logging Facade for Java)是一个日志门面,不直接实现日志功能,而是桥接各种底层日志框架(如 Logback、Log4j、JUL 等)。使用它能让代码与具体日志实现解耦,便于后期切换日志系统。
添加 SLF4J 依赖
根据你选用的底层日志实现,引入对应依赖。最常用的是 Logback(SLF4J 的原生实现),Maven 配置如下:
注意:logback-classic 已自动包含 slf4j-api 和 Logback 实现,无需额外引入 logback-core。
获取 Logger 并记录日志
在类中通过 LoggerFactory 获取日志器,推荐用当前类的 Class 对象作为参数,便于定位日志来源:
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserService {
private static final Logger log = LoggerFactory.getLogger(UserService.class);
public void createUser(String name) {
log.info("Creating user: {}", name);
try {
// ...
} catch (Exception e) {
log.error("Failed to create user: {}", name, e);
}
}
}
- 使用
{}占位符替代字符串拼接,性能更好,异常对象放在最后可自动打印堆栈 - 支持多个占位符:
log.debug("User {} logged in from IP: {}", username, ip) - 避免写
log.isInfoEnabled() && log.info(...)—— SLF4J 内部已优化,无需手动判断
配置日志输出(以 Logback 为例)
在 src/main/resources 下创建 logback.xml 或 logback-spring.xml(Spring Boot 推荐后者):
- 可通过
单独调整某个包/类的日志级别 - 支持文件输出(
RollingFileAppender)、异步日志(AsyncAppender)等高级功能
常见注意事项
- 确保项目中只有一个 SLF4J 绑定实现(如只引入
logback-classic),否则启动时会报“SLF4J multiple bindings”警告 - 若旧项目用了
commons-logging或log4j 1.x,可用jcl-over-slf4j或log4j-over-slf4j桥接,统一到 SLF4J - Spring Boot 默认集成 SLF4J + Logback,只需配置
application.properties中的logging.level.*和logging.file.name即可快速启用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










