基于Spring Boot的全方位日志使用指南

 更新时间:2026年06月11日 11:21:07   作者:Java水解  
随着Spring Boot的广泛应用,其日志管理功能也越来越受到开发者的关注,日志是软件开发中不可或缺的一部分,这篇文章主要介绍了基于Spring Boot的全方位日志使用的相关资料,需要的朋友可以参考下

一、日志概述:为什么它比 System.out.println 更重要?

在 [Java 开发]早期,我们习惯使用 System.out.println() 来调试代码 。但随着项目复杂度提升,简单的打印语句已无法满足生产环境的需求 。

1.1 日志的核心用途

  • 系统监控:记录系统运行状态、方法响应时间及状态,设置阈值报警 。
  • 数据采集:统计 PV/UV、用户留存,为推荐算法提供原始数据 。
  • 日志审计:记录用户操作记录,追踪非法攻击或信息泄露(如谁删除了关键数据) 。

1.2 为什么弃用标准输出?

通过 System.out.print 打印的日志相比 Spring Boot 默认日志缺少了时间戳、日志级别、进程 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 logTest() {
        logger.info("这是一条 INFO 级别的日志");
        return "Log Success";
    }
}


AI写代码java
运行
123456789101112131415

千万不要导错包!!!

3.2 进阶方式:使用 Lombok (@Slf4j)

引入 Lombok 依赖后,只需一个注解即可自动生成 log 对象。

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;

@Slf4j // 自动提供 log 对象
@RestController
public class LogController {
    public void log() {
        log.info("使用 Lombok 快速打印日志");
    }
}


AI写代码java
运行
1234567891011

四、深入理解日志级别

日志级别按严重程度从高到低排列为:FATAL > ERROR > WARN > INFO > DEBUG > TRACE

  • ERROR:记录较高等级的错误,但不影响系统运行 。
  • WARN:警告信息,需引起注意 。
  • INFO:默认级别,记录系统运行的关键节点。
  • DEBUG:调试阶段的关键信息 。

注意:Spring Boot 默认级别为 INFO,因此默认情况下不会打印 DEBUG 和 TRACE 级别的日志 。

五、日志的高级配置 (application.yml)

5.1 修改日志级别

logging:
  level:
    root: debug # 将全局日志级别设为 debug [cite: 39]

AI写代码yaml
1234

5.2 日志持久化

在线上环境中,必须将日志保存到文件。

logging:
  file:
    name: logger/springboot.log # 指定文件名(推荐使用) 
    path: D:/temp           # 仅指定目录,文件名为默认的 spring.log 

AI写代码yaml
12345

5.3 日志文件分割

为防止单个日志文件过大(默认超过 10MB 分割),可进行如下配置:

logging:
  logback:
    rollingpolicy:
      max-file-size: 1KB # 达到 1KB 自动分割(实际生产常用 200MB)
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i # 分割后的命名格式

AI写代码yaml
123456

六、自定义日志格式说明

通过 logging.pattern.console 或 logging.pattern.file 可以自定义输出格式。

占位符说明
%d日期和时间(精确到毫秒)
%5p日志级别
%c类的全限定名
%m日志消息内容

七、总结

  1. 日志的重要性:它是程序运行的“黑匣子”,是定位问题、审计安全、分析数据的核心依据 。
  2. 最佳实践:推荐使用 Lombok 的 @Slf4j 注解,并通过 YAML 配置文件实现日志的级别控制、持久化及滚动拆分。

到此这篇关于基于Spring Boot的全方位日志使用指南的文章就介绍到这了,更多相关SpringBoot日志使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot项目javax.validation使用方法详解

    Springboot项目javax.validation使用方法详解

    这篇文章主要介绍了Springboot项目javax.validation使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 详解Springboot中的异步、定时、邮件任务

    详解Springboot中的异步、定时、邮件任务

    这篇文章主要介绍了Springboot中的异步、定时、邮件任务,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-11-11
  • java实现单链表中的增删改

    java实现单链表中的增删改

    这篇文章主要为大家详细介绍了java实现单链表中的增删改,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Spring Boot事务配置详解

    Spring Boot事务配置详解

    这篇文章主要介绍了Spring Boot事务配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 理解Java多线程之并发编程

    理解Java多线程之并发编程

    这篇文章主要介绍了理解Java多线程之并发编程的相关资料,需要的朋友可以参考下
    2023-02-02
  • Springboot使用ResponseBody汉字返回问号问题

    Springboot使用ResponseBody汉字返回问号问题

    这篇文章主要介绍了Springboot使用ResponseBody汉字返回问号问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java项目中classpath类路径是什么

    Java项目中classpath类路径是什么

    classpath指的是类路径,也就是编译之后的target文件夹下的WEB-INF/class文件夹,下面这篇文章主要给大家介绍了关于Java项目中classpath类路径是什么的相关资料,需要的朋友可以参考下
    2023-02-02
  • springboot @Value实现获取计算机中绝对路径文件的内容

    springboot @Value实现获取计算机中绝对路径文件的内容

    这篇文章主要介绍了springboot @Value实现获取计算机中绝对路径文件的内容,具有很好的参考价值,希望对大家有所帮助。
    2021-09-09
  • java项目如何引入其他jar包

    java项目如何引入其他jar包

    通常在lib文件夹中存放从外部引入的jar包,所以把JAR文件复制进去。 然后修改编译脚本,不需要去编译tool文件夹里面的java类,直接把jar包添加到classpath,下文将详细介绍
    2021-10-10
  • Springboot如何配置多个Redis数据源(非集群)

    Springboot如何配置多个Redis数据源(非集群)

    这篇文章主要介绍了Springboot如何配置多个Redis数据源(非集群)方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03

最新评论