当前位置: 首页 > news >正文

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

配置说明:

  1. 基础路径设置

    • logging.file.name: logs/app.log 指定了主日志文件的路径和名称
    • 会自动创建 logs 目录(如果不存在)
  2. 滚动策略核心配置

    • fileNamePattern:归档日志的命名规则,%d{yyyy-MM-dd} 表示按日期分割,%i 表示同一日内的文件序号
    • maxFileSize:单个日志文件的最大大小,超过此值会创建新文件
    • maxHistory:日志文件保留的天数,超过此天数的旧日志会被自动删除
    • totalSizeCap:所有日志文件的总大小上限,超过此值会删除最旧的日志
  3. 格式配置

    • 通过 pattern.file 配置文件中日志的输出格式
    • 包含了时间戳、线程名、日志级别、 logger 名称和日志消息

这种配置方式的优点是简单直观,无需额外创建 XML 文件,适合大多数基础场景。如果需要更复杂的日志配置(如按不同级别输出到不同文件、自定义过滤器等),则建议使用专门的 Logback XML 配置文件。

五、总结

Spring Boot 日志操作围绕 SLF4J + 日志实现(如 Logback ) 展开,从基础的日志级别控制、代码中用 @Slf4j 简化日志对象创建,到定制输出格式让日志更直观,再到配置日志文件持久化与滚动策略,构建完整日志体系。合理运用这些操作,能让日志成为开发调试、运维监控的得力助手,快速定位问题,保障系统稳定运行 。快去优化你的 Spring Boot 项目日志配置吧,让排查问题更轻松~

http://www.dtcms.com/a/357953.html

相关文章:

  • 加密软件哪个好用?加密软件-为数据共享提供安全保障
  • SQLSERVER分页存储过程
  • 【YOLO11小目标改进】多尺度前馈网络(MSFN)代码
  • 第 8 篇:量化交易之tradeUI和webserverUI 区别?
  • 学习Python中Selenium模块的基本用法(11:弹窗处理)
  • LangGraph结构化输出详解:让智能体返回格式化数据
  • Docker核心概念与镜像仓库操作指南
  • AIGC应用与实践- 实验1:采用Markdown转换成WORD文档方式
  • 基于SpringBoot的流浪动物领养系统【2026最新】
  • Java函数式编程之【流(Stream)性能优化】
  • Docker(自写)
  • Netty 心跳与链路保活机制详解:保证高并发环境下的稳定连接
  • Web 聊天室消息加解密方案详解
  • Java面试-spring boot框架
  • 音视频学习(六十):H264中的PPS
  • 【C语言】字符函数与字符串函数实战:用法原理 + 模拟实现
  • VMware 设置 Ubuntu 虚拟机桥接模式完整教程
  • 音视频学习(六十二):H264中的SEI
  • 【Qt开发】按钮类控件(一)-> QPushButton
  • Ethan独立开发新品速递 | 2025-08-30
  • 【读书笔记】《最好的告别》
  • Git 安装与国内加速(配置 SSH Key + 镜像克隆)
  • 系统质量属性
  • 【瑞吉外卖】手机号验证码登录(用QQ邮件发送代替)
  • wpf之附加属性
  • 学习嵌入式第四十一天
  • 【电力电子】MCP602运算放大器测交流电压(120VAC/230VAC),带直流偏置2.5V,比例:133.5:1
  • 【杂谈】-混沌理论能否赋予机器差异化思考能力?
  • 华为 HarmonyOS 代表未来
  • 初学者如何学习项目管理