Spring Boot 日志系统实战指南:框架、级别与配置
Spring Boot 日志系统采用 SLF4J 门面模式配合 Logback 实现,相比 System.out.println 提供更丰富的调试信息。内容涵盖日志核心用途、常见框架对比、Lombok @Slf4j 注解用法、日志级别定义(FATAL 至 TRACE)以及 application.yml 中的级别调整、文件持久化路径设置和滚动策略配置。建议生产环境通过 YAML 统一控制日志格式与分割规则,提升可维护性。

Spring Boot 日志系统采用 SLF4J 门面模式配合 Logback 实现,相比 System.out.println 提供更丰富的调试信息。内容涵盖日志核心用途、常见框架对比、Lombok @Slf4j 注解用法、日志级别定义(FATAL 至 TRACE)以及 application.yml 中的级别调整、文件持久化路径设置和滚动策略配置。建议生产环境通过 YAML 统一控制日志格式与分割规则,提升可维护性。

在 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 | 负责具体的日志记录逻辑 |
需要使用 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 logTest() {
logger.info("这是一条 INFO 级别的日志");
return "Log Success";
}
}
引入 Lombok 依赖后,只需一个注解即可自动生成 log 对象。
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogController {
public void log() {
log.info("使用 Lombok 快速打印日志");
}
}
日志级别按严重程度从高到低排列为:FATAL > ERROR > WARN > INFO > DEBUG > TRACE。
注意:Spring Boot 默认级别为
INFO,因此默认情况下不会打印DEBUG和TRACE级别的日志。
logging:
level:
root: debug # 将全局日志级别设为 debug
在线上环境中,必须将日志保存到文件。
logging:
file:
name: logger/springboot.log # 指定文件名(推荐使用)
path: D:/temp # 仅指定目录,文件名为默认的 spring.log
为防止单个日志文件过大(默认超过 10MB 分割),可进行如下配置:
logging:
logback:
rollingpolicy:
max-file-size: 1KB # 达到 1KB 自动分割(实际生产常用 200MB)
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i # 分割后的命名格式
通过 logging.pattern.console 或 logging.pattern.file 可以自定义输出格式。
| 占位符 | 说明 |
|---|---|
%d | 日期和时间(精确到毫秒) |
%5p | 日志级别 |
%c | 类的全限定名 |
%m | 日志消息内容 |
@Slf4j 注解,并通过 YAML 配置文件实现日志的级别控制、持久化及滚动拆分。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online