Spring Boot 日志实战指南
在 Java 开发初期,我们可能习惯用 System.out.println() 来调试代码。但随着项目复杂度提升,简单的打印语句已无法满足生产环境的需求。日志不仅是调试工具,更是系统监控、数据采集和审计的核心依据。
为什么弃用标准输出?
通过 System.out.print 打印的日志相比 Spring Boot 默认日志缺少了时间戳、日志级别、进程 ID、线程名等关键排查信息。在生产环境中,这些信息对于快速定位问题是不可或缺的。
日志框架体系
Spring Boot 默认集成了 SLF4J 作为日志门面,并使用 Logback 作为具体实现。这种组合是业界的标准做法。
门面模式的优势
SLF4J 是门面模式的典型应用。它为子系统(如 Log4j、JUL、Logback)提供统一接口,使得客户端无需关心底层实现。这样做的好处是减少系统依赖,提高灵活性,简化客户端使用难度。
| 角色 | 框架名称 | 说明 |
|---|---|---|
| 日志门面 | SLF4J, commons-logging | 统一 API 接口,不含逻辑实现 |
| 日志实现 | Logback, Log4j 1/2, JUL | 负责具体的日志记录逻辑 |
实战:Spring Boot 日志的基本使用
传统方式获取日志对象
需要使用 LoggerFactory 获取,并指定当前类的 Class 对象。注意 Logger 对象必须属于 org.slf4j 包。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class LoggerController {
// 注意:Logger 对象必须属于 org.slf4j 包
private static final Logger logger = LoggerFactory.getLogger(LoggerController.class);
public String logTest() {
logger.info("这是一条 INFO 级别的日志");
return "Log Success";
}
}
进阶方式:使用 Lombok (@Slf4j)
引入 Lombok 依赖后,只需一个注解即可自动生成 对象,能显著减少样板代码。


