Spring Boot 日志实战:级别、持久化与 SLF4J 配置指南
日志本质上是系统、软件或设备按时间顺序记录操作、事件或状态的文件文本,用于最终历史、排查问题和审计。
Spring Boot 项目在启动时就有默认的日志输出,这为我们提供了基础的可观测性。
核心作用
- 问题排查:当软件崩溃、系统出错时,日志会记录错误代码、发生时间和上下文,帮助技术人员定位原因。
- 行为审计:记录用户的关键操作,比如谁登录了系统、谁修改了文件,用于追溯责任或合规检查。
- 状态监控:实时记录系统资源使用情况,如 CPU 占用率、内存使用量,帮助发现性能瓶颈。
日志的级别分类
日志的级别从高到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE。
- FATAL: 致命信息,表示需要立即被处理的系统级错误。
- ERROR: 错误信息,级别较高的错误日志信息,但不影响系统的继续运行。
- WARN: 警告信息,不影响使用,但需要注意。
- INFO: 普通信息,用于记录应用程序正常运行时的一些信息。
- DEBUG: 调试信息,需要调试时候的关键信息打印。
- TRACE: 追踪信息,比 DEBUG 更细粒度的信息事件。
日志级别的使用
Spring Boot 默认的日志框架是 Logback,Logback 没有 FATAL 级别,它会被映射到 ERROR。
@RestController
@RequestMapping("/logger")
public class LoggerController {
private final static Logger logger = LoggerFactory.getLogger(LoggerController.class);
@RequestMapping("/printlog")
public String logger() {
logger.error("error....");
logger.warn("warn....");
logger.info("info...");
logger.debug("debug...");
logger.trace("trace...");
return "打印日志级别";
}
}
这里的打印结果通常只包含 error、warn、info。这是因为日志的输出级别默认是 INFO,所以只会打印大于等于 INFO 的级别。
日志级别的配置
可以通过配置文件调整日志级别。
YAML 配置
logging:
level:
root: debug
Properties 配置
logging.level.root=debug
调整后,控制台将显示更详细的调试信息。
日志持久化
什么是日志持久化?
日志持久化是指将程序运行过程中产生的日志数据,从内存写入到磁盘等持久化存储介质的过程,核心目的是防止日志因系统崩溃、断电等意外丢失。
日志持久化的配置
YAML 配置
logging:
file:
name: logger/log.log
Properties 配置
logging.file.name=logger/log.log
路径后面可以跟绝对路径也可以是相对路径。运行后,日志会保存在对应的目录中。
配置日志文件的滚动策略
为了避免日志文件无限增长,我们可以配置滚动策略。
YAML 配置
logging:
logback:
rollingpolicy:
max-file-size: 1KB
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
Properties 配置
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i
logging.logback.rollingpolicy.max-file-size=1KB
这样设置后,日志文件会根据大小和日期进行滚动归档。
更简单的日志输出
添加依赖
引入 Lombok 依赖以简化代码。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
@Slf4j 注解
使用 @Slf4j 注解后,无需手动定义 Logger 实例,直接调用 log 对象即可。
@Slf4j
public class LoggerController2 {
public String logger() {
log.info("info....");
return "打印日志";
}
}
这样就不用写那一长句初始化代码了,但要确保使用的是 log 而不是 logger。

