Spring Boot 日志操作全解析:从基础到实践
在 Spring Boot 开发中,日志是排查问题、监控系统运行状态的重要工具。本文将围绕 Spring Boot 日志的基本操作,从日志基础使用,到代码中运用日志工具、优化日志对象创建,再到日志输出格式控制与日志文件配置,全方位带你掌握 Spring Boot 日志玩法。
目录
一、日志基础使用规则
(一)日志的作用与级别
二、代码中使用日志工具记录日志
(一)传统方式创建日志对象
(二)优化日志对象创建:Lombok @Slf4j 注解
1. 引入 Lombok 依赖
2. 在类上使用 @Slf4j 注解
三、日志输出格式控制
(一)简单格式配置示例(YAML 格式)
(二)更丰富的格式配置
四、日志文件设置
(一)基本文件日志配置
(二)滚动日志(按大小或时间分割)
配置说明:
五、总结
一、日志基础使用规则
(一)日志的作用与级别
日志主要用于记录开发调试与运维过程消息 ,帮我们追踪程序运行轨迹、定位问题。日志级别共 6 种,实际常用 4 种,按严重程度从低到高依次是:
- DEBUG:用于开发阶段,记录详细调试信息,如变量值、方法执行步骤,协助排查代码逻辑问题。
- INFO:记录程序正常运行的关键信息,像系统启动完成、重要业务流程执行完毕,反映系统整体状态。
- WARN:提示潜在问题,比如参数校验不通过、资源即将耗尽(如磁盘空间不足预警 ),虽不影响程序运行,但需关注。
- ERROR:记录程序运行中出现的错误,如异常抛出、接口调用失败,是定位故障的核心线索。
我们可通过日志组或代码包形式控制日志显示级别,在配置文件(如 application.yml
)里,指定某个包下日志输出级别,示例:
logging:level:com.example.demo: DEBUG # com.example.demo 包下日志,以 DEBUG 级别输出
二、代码中使用日志工具记录日志
(一)传统方式创建日志对象
在 Spring Boot 中,常用 SLF4J 作为日志门面(抽象层),搭配 Logback 等日志实现。传统创建日志对象,需在类中声明:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;@Service
public class UserService {private static final Logger logger = LoggerFactory.getLogger(UserService.class);public void createUser(String username) {logger.info("开始创建用户,用户名:{}", username);// 业务逻辑...logger.info("用户创建完成");}
}
通过 LoggerFactory.getLogger(类名.class)
获取日志对象,传入当前类 Class
,方便定位日志所属类。
(二)优化日志对象创建:Lombok @Slf4j 注解
手动创建日志对象稍显繁琐,Lombok 的 @Slf4j
注解可简化操作。
1. 引入 Lombok 依赖
若用 Maven,在 pom.xml
添加:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
Gradle 项目则在 build.gradle
加入:
implementation 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
2. 在类上使用 @Slf4j 注解
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;@Slf4j
@Service
public class UserService {public void createUser(String username) {log.info("开始创建用户,用户名:{}", username);// 业务逻辑...log.info("用户创建完成");}
}
@Slf4j
会自动为类生成名为 log
的日志对象,直接用 log
调用日志方法,简洁高效,减少样板代码。
三、日志输出格式控制
Spring Boot 支持灵活配置日志输出格式,在 application.yml
或 application.properties
中设置。
(一)简单格式配置示例(YAML 格式)
logging:pattern:console: "%d - %m%n"
%d
:输出日志产生的日期时间 ,默认格式如2025-08-29 10:00:00
。%m
:输出日志消息内容,即我们用log.info
等方法传入的内容。%n
:换行符,让每条日志输出后换行,保持清晰格式。
(二)更丰富的格式配置
logging:pattern:console: "%d %clr(%p) --- [%16t] %clr(%-40.40c){cyan} : %m %n"
各占位符含义:
%d
:日期时间。%clr(%p)
:%p
是日志级别(DEBUG、INFO 等 ),%clr
为级别添加颜色,不同级别在控制台显示不同颜色,方便区分,比如 ERROR 可能显示红色 。---
:固定分隔符,增强可读性。[%16t]
:%t
是当前线程名,16
表示占 16 个字符宽度,右对齐(可加-
改为左对齐 ),线程名太长会截断,方便日志按线程维度查看执行顺序。%clr(%-40.40c){cyan}
:%c
是日志所属类的全限定名(包名 + 类名 ),-40.40
表示左对齐,最多显示 40 个字符,超过截断;{cyan}
设为青色,在控制台突出类名。: %m %n
:冒号分隔,接着输出日志消息和换行。
通过定制格式,让日志在控制台更易读、信息更清晰,方便快速定位关键内容。
四、日志文件设置
除控制台输出,通常还要将日志写入文件,持久化存储,便于后续分析。
(一)基本文件日志配置
在 application.yml
中添加:
logging:file:name: app.log # 日志文件名,默认在项目根目录,也可指定路径如 /var/log/app.logpattern:file: "%d [%t] %p %c: %m%n" # 文件中日志输出格式,可按需调整
这样,日志会同时输出到控制台和 app.log
文件,记录程序运行全程日志,出现问题时,能从文件追溯历史记录。
(二)滚动日志(按大小或时间分割)
为避免日志文件过大,可配置滚动策略,以 Logback 为例(Spring Boot 默认集成 Logback ),在 src/main/resources
下创建 logback-spring.xml
自定义配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="ROLLINGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>app.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 历史日志归档路径与文件名格式,按日期和大小分割 --><fileNamePattern>app.%d{yyyy-MM-dd}.%i.log</fileNamePattern><!-- 单个日志文件最大大小 --><maxFileSize>10MB</maxFileSize> <!-- 日志保留天数 --><maxHistory>30</maxHistory> <!-- 总大小限制,超过删除旧文件 --><totalSizeCap>1GB</totalSizeCap> </rollingPolicy><encoder><pattern>%d [%t] %p %c: %m%n</pattern></encoder></appender><root level="INFO"><appender-ref ref="ROLLINGFILE" /><appender-ref ref="CONSOLE" /></root>
</configuration>
通过滚动策略,按大小(如 10MB )或时间(每天 )分割日志文件,保留一定历史(30 天 ),并限制总大小(1GB ),既节省磁盘空间,又方便管理不同时段日志。
在 Spring Boot 中,虽然 XML 配置文件(如 logback-spring.xml)能更灵活地配置滚动日志,但也可以通过 application.yml
实现基础的滚动日志配置。不过需要注意的是,YAML 配置的滚动策略功能相对有限,适合简单场景。
以下是使用 YAML 配置滚动日志的实现方式:
logging:# 日志文件基础配置file:name: logs/app.log # 日志文件路径及名称# 日志输出格式pattern:file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"# 滚动日志配置(仅适用于 Logback)logback:rollingpolicy:# 归档日志文件名称格式fileNamePattern: logs/app.%d{yyyy-MM-dd}.%i.log# 单个日志文件最大大小maxFileSize: 10MB# 日志文件保留天数maxHistory: 30# 总日志文件大小上限totalSizeCap: 1GB# 是否在应用启动时就创建日志文件cleanHistoryOnStart: false
配置说明:
-
基础路径设置:
logging.file.name: logs/app.log
指定了主日志文件的路径和名称- 会自动创建
logs
目录(如果不存在)
-
滚动策略核心配置:
fileNamePattern
:归档日志的命名规则,%d{yyyy-MM-dd}
表示按日期分割,%i
表示同一日内的文件序号maxFileSize
:单个日志文件的最大大小,超过此值会创建新文件maxHistory
:日志文件保留的天数,超过此天数的旧日志会被自动删除totalSizeCap
:所有日志文件的总大小上限,超过此值会删除最旧的日志
-
格式配置:
- 通过
pattern.file
配置文件中日志的输出格式 - 包含了时间戳、线程名、日志级别、 logger 名称和日志消息
- 通过
这种配置方式的优点是简单直观,无需额外创建 XML 文件,适合大多数基础场景。如果需要更复杂的日志配置(如按不同级别输出到不同文件、自定义过滤器等),则建议使用专门的 Logback XML 配置文件。
五、总结
Spring Boot 日志操作围绕 SLF4J + 日志实现(如 Logback ) 展开,从基础的日志级别控制、代码中用 @Slf4j
简化日志对象创建,到定制输出格式让日志更直观,再到配置日志文件持久化与滚动策略,构建完整日志体系。合理运用这些操作,能让日志成为开发调试、运维监控的得力助手,快速定位问题,保障系统稳定运行 。快去优化你的 Spring Boot 项目日志配置吧,让排查问题更轻松~