Spring Boot集成/输出/日志级别控制/持久化开发实践

2025-08-01 20:50

本文主要是介绍Spring Boot集成/输出/日志级别控制/持久化开发实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过...

一、日志概述

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项目在启动时默认有日志输出

Spring Boot集成/输出/日志级别控制/持久化开发实践

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

Spring Boot集成/输出/日志级别控制/持久化开发实践

2.1、打印日志

2.1.1、获取日志对象

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

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

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

Spring Boot集成/输出/日志级别控制/持久化开发实践

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

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

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

日志输出效果:

Spring Boot集成/输出/日志级别控制/持久化开发实践

2.2、日志格式的说明

Spring Boot集成/输出/日志级别控制/持久化开发实践

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

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

2.3、日志级别

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

Spring Boot集成/输出/日志级别控制/持久化开发实践

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

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

2.3.1、日志级别的分类

Spring Boot集成/输出/日志级别控制/持久化开发实践

日志级别从高到低依次为:FATALERRORWARNINFODEBUGTRACE

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

2.3.2、日志级别的使用

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

@Controller
public class LoggUNVuDderController {
    private Logger  logger = LoggerFactory.getLogger(LoggerController.class);
    @PostConstruct
    public void loggerTest(){
        logger.trace("================= trace ===============");
        logger.debug("================= debug ===============");
        logger.info("================= info ===============");
        logger.warn("================= warn ===============");
        logger.error("================= error ===============");
    }
}

Spring Boot集成/输出/日志级别控制/持久化开发实践

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

2.5、日志配置

2.5.1、配置日志级别

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

Spring Boot集成/输出/日志级别控制/持久化开发实践

2.5.2、日志持久化

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

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

Spring Boot集成/输出/日志级别控制/持久化开发实践

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

Spring Boot集成/输出/日志级别控制/持久化开发实践

Spring Boot集成/输出/日志级别控制/持久化开发实践

配置日志文件的保存路径

Spring Boot集成/输出/日志级别控制/持久化开发实践

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

Spring Boot集成/输出/日志级别控制/持久化开发实践

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

Spring Boot集成/输出/日志级别控制/持久化开发实践

请注意:

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

2.6、Slf4j 注解

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

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

查看控制台输出结果:

Spring Boot集成/输出/日志级别控制/持久化开发实践

Spring Boot集成/输出/日志级别控制/持久化开发实践

到此这篇关于Spring Boot集成/输出/日志级别控制/持久化开发实践的文章就介绍到这了,更多相关Spring Boot日志级别内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Spring Boot集成/输出/日志级别控制/持久化开发实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155555

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础