⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/2302_81247414 「Mr Aokey」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

一、日志概述

1.1、Spring Boot日志简介

Spring Boot 作为Java生态中广泛使用的框架,提供了强大的日志功能,帮助开发者高效记录和追踪应用运行状态。日志系统在调试、监控和问题排查中扮演着关键角色,而 Spring Boot 默认集成了流行的日志框架(如Logback、Log4j2),并支持灵活的配置方式

1.2、日志框架与默认配置

Spring Boot默认采用 Logback 作为日志实现,通过 pring-boot-starter-logging 依赖自动引入。开发者无需额外配置即可使用基础的日志功能,如控制台输出和文件记录。日志级别(如INFO、DEBUG、ERROR)可通过配置文件(application.properties或application.yml)动态调整

1.3、日志的核心作用

  • 问题诊断: 通过日志快速定位异常或性能瓶颈
  • 行为追踪: 记录关键业务流程,便于审计和分析
  • 性能监控: 结合日志聚合工具(如ELK、Graylog)实现实时监控

二、日志的使用

Spring Boot项目在启动时默认有日志输出

显而易见,日志输出的内容与我们使用 System.out.println()输出的格式不一样,我们输出的内容相比日志缺少了很多内容

2.1、打印日志

2.1.1、获取日志对象

程序中获取日志对象需要使用日志工厂 LoggerFactory,代码如下:

@Controller
public class LoggerController {
private Logger logger= LoggerFactory.getLogger(LoggerController.class);
}

LoggerFactory.getLogger()方法需要传入一个参数来标识日志名称,这样可以明确日志来源的类名,便于在出现错误时快速定位问题。

2.1.2、使用日志对象打印日志

下面我们使用info()方法来输出日志:

@Controller
public class LoggerController {
private Logger logger = LoggerFactory.getLogger(LoggerController.class);
@PostConstruct
public void loggerTest(){
logger.info("凡王之血,必以剑终");
}
}

日志输出效果:

2.2、日志格式的说明

日志输出包含以下关键元素:

  • 时间戳(精确到毫秒级)
  • 日志级别(ERROR / WARN / INFO / DEBUG / TRACE)
  • 进程ID
  • 应用名称
  • 线程名称
  • Logger名称(通常对应源代码的类名)
  • 日志正文内容

2.3、日志级别

我们在编写代码测试时,难免会出现错误,当出现错误时,我们观察日志信息:

发现控制台有不同的日志级别,那么日志级别是用来干什么的呢?

答:通过设置日志级别,可以筛选出我们所需的信息。例如,若仅需关注 error 级别的日志,系统就会自动过滤出相关记录,从而节省开发者筛选信息的时间

2.3.1、日志级别的分类

日志级别从高到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE

  • FATAL: 致命错误,表示需要立即处理的系统级严重问题
  • ERROR: 错误信息,记录较高级别的错误,但不会影响系统继续运行
  • WARN: 警告信息,表示可能存在但不影响系统使用的问题
  • INFO: 常规信息,记录应用程序正常运行时的状态(如系统启动完成、请求处理完毕等)
  • DEBUG: 调试信息,用于开发和排查问题时输出关键数据
  • TRACE: 追踪信息,提供比DEBUG更细粒度的日志记录(若无特殊需求,建议使用DEBUG级别)

2.3.2、日志级别的使用

Logger 对象针对不同级别提供了相应的日志输出方法

@Controller
publicclassLoggerController {
privateLoggerlogger= LoggerFactory.getLogger(LoggerController.class);
@PostConstruct
publicvoidloggerTest(){
logger.trace("================= trace ===============");
logger.debug("================= debug ===============");
logger.info("================= info ===============");
logger.warn("================= warn ===============");
logger.error("================= error ===============");
}
}

结果显示仅输出了 info、warn 、error 和 debug 级别的日志,这是因为我们在 properties 配置文件中配置了 logging.level.root=debug,因此才显示出这四类日志,但日志级别配置默认为 info,系统会输出等于或高于该级别的日志信息

2.5、日志配置

2.5.1、配置日志级别

日志级别配置只需在配置文件中设置 “logging.level“ 项即可,即可得出上文运行结果,示例如下:

2.5.2、日志持久化

以上的日志都是输出在控制台上的,但在实际应用中,控制台输出的日志需要被保存下来以便后续问题排查,这种将日志存储起来的过程称为日志持久化

配置日志文件的路径和文件名

运行后,发现 logger 目录下自动创建了 springboot.log 文件,文件中也保存了运行的日志信息:

配置日志文件的保存路径

该方法仅能设置日志的存储路径,默认生成固定文件名的 spring.log,程序运行时,会在指定路径下自动创建该日志文件

我们使用记事本打开观察:可见刚刚程序运行的日志信息都存储到该文件中

请注意:

当同时配置 logging.file.name 和 logging.file.path 时,仅其中一个配置会生效,系统会优先采用 logging.file.name 的设置

2.6、Slf4j 注解

Lombok 的 @Slf4j 注解会自动为我们生成一个日志对象 log,可以直接使用

@Slf4j
@Controller
public class LoggerController {
@PostConstruct
public void loggerTest(){
log.info("---------------注解生成日志对象");
}
}

查看控制台输出结果:

文章目录
  1. 1. 一、日志概述
    1. 1.1. 1.1、Spring Boot日志简介
    2. 1.2. 1.2、日志框架与默认配置
    3. 1.3. 1.3、日志的核心作用
  2. 2. 二、日志的使用
    1. 2.1. 2.1、打印日志
      1. 2.1.1. 2.1.1、获取日志对象
      2. 2.1.2. 2.1.2、使用日志对象打印日志
    2. 2.2. 2.2、日志格式的说明
    3. 2.3. 2.3、日志级别
      1. 2.3.1. 2.3.1、日志级别的分类
      2. 2.3.2. 2.3.2、日志级别的使用
    4. 2.4. 2.5、日志配置
      1. 2.4.1. 2.5.1、配置日志级别
      2. 2.4.2. 2.5.2、日志持久化
    5. 2.5. 2.6、Slf4j 注解