Spring Boot 日志实战指南
一、为什么日志比 System.out.println 更重要?
Java 开发初期,大家常靠 System.out.println() 调试。但项目规模上来后,这种简单输出在生产环境就捉襟见肘了。
1.1 日志的核心用途
- 系统监控:记录运行状态、方法耗时及状态,设置阈值报警。
- 数据采集:统计 PV/UV、用户留存,为算法提供原始数据。
- 日志审计:追踪非法攻击或信息泄露,比如谁删除了关键数据。
1.2 弃用标准输出的理由
System.out.print 往往缺失时间戳、日志级别、进程 ID 和线程名,排查问题时这些信息至关重要。
二、日志框架体系:门面模式解析
Spring Boot 默认集成了 SLF4J 作为日志门面,并使用 Logback 作为具体实现。
2.1 门面模式 (Facade Pattern)
SLF4J 采用了门面模式,为 Log4j、JUL、Logback 等底层实现提供了统一接口,让上层调用无需耦合具体框架。
- 优点:减少依赖,提高灵活性,简化客户端使用难度。
2.2 常见框架对比
| 角色 | 框架名称 | 说明 |
|---|---|---|
| 日志门面 | SLF4J, commons-logging | 统一 API 接口,不含逻辑实现 |
| 日志实现 | Logback, Log4j 1/2, JUL | 负责具体的日志记录逻辑 |
三、实战:Spring Boot 日志的基本使用
3.1 传统方式获取日志对象
需要使用 LoggerFactory 获取,并指定当前类的 Class 对象。注意包路径别选错,这是新手容易踩的坑。
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 {
logger.info();
;
}
}


