【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析



💓 博客主页:从零开始的-CodeNinja之路
⏩ 收录文章:【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
🎉欢迎大家点赞👍评论📝收藏⭐文章
目录
- Spring Boot 日志
- 一. 日志的概念?
- 二. 日志
- 2.1 日志的格式
- 2.2 日志级别
- 2.3 日志的使用
- 三. 门面模式(外观模式)
- 四. SLF4J框架
- 总结
Spring Boot 日志
一. 日志的概念?
日志对我们来说并不陌⽣,通过打印日志来发现和定位问题,或者根据日志来分析程序的运行过程.
日志的用途
Spring Boot中的日志管理是非常重要的,它可以帮助开发人员在应用程序运行时跟踪问题、监控性能并记录关键信息。通过配置适当的日志级别和输出格式,开发人员可以更好地理解应用程序的行为并快速定位和解决问题。Spring Boot提供了灵活且强大的日志管理功能,使开发人员能够轻松地集成和配置各种日志框架,如Logback、Log4j2等,以满足不同项目的需求。
二. 日志
2.1 日志的格式

从上图可以看到,日志输出内容元素具体如下:
- 时间日期:精确到毫秒
- 日志级别:ERROR,WARN,INFO,DEBUG或TRACE
- 进程ID
- 线程名
- Logger名(通常使用源代码的类名)
- 日志内容
2.2 日志级别
日志级别代表着日志信息对应问题的严重性,为了更快的筛选符合⽬标的日志信息.
日志的级别从高到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
- FATAL:致命信息,表示需要立即被处理的系统级错误.
- ERROR:错误信息,级别较⾼的错误日志信息,但仍然不影响系统的继续运行
- WARN:警告信息,不影响使用,但需要注意的问题
- INFO:普通信息,用于记录应用程序正常运行时的⼀些信息,例如系统启动完成、请求处理完成等.
- DEBUG:调试信息,需要调试时候的关键信息打印.
- TRACE:追踪信息,比DEBUG更细粒度的信息事件(除非有特殊⽤意,否则请使用DEBUG级别替代)
日志级别的顺序:

级别越高,收到的消息越少
2.3 日志的使用
SpringBoot内置了日志框架 Slf4j ,我们可以直接调用 Slf4j 来输出日志
添加lombok依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
输出⽇志
lombok提供的 @Slf4j 会帮我们提供⼀个日志对象log,我们直接使用就可以.
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;@Slf4j
@RestControllerpublic class LogController {public void log(){log.info("--------------要输出⽇志的内容----------------");}
}
三. 门面模式(外观模式)
SLF4J是门面模式的典型应用(但不仅仅使⽤了门面模式).SLF4J不同于其他日志框架,它不是⼀个真正的日志实现,而是⼀个抽象层,对日志框架制定的⼀种规范,标准,接口.所有SLF4J并不能独⽴使用,需要和具体的日志框架配合使用.
门面模式定义
门面模式(FacadePattern)⼜称为外观模式,提供了⼀个统⼀的接口,用来访问子系统中的⼀群接口.
其主要特征是定义了⼀个高层接口,让子系统更容易使用.
原文:Provideaunifiedinterfacetoasetofinterfacesinasubsystem.Facadedefinesahigherlevelinterfacethatmakesthesubsystemeasiertouse.
解释:要求⼀个⼦系统的外部与其内部的通信必须通过⼀个统⼀的对象进⾏.门面模式提供⼀个⾼层 次的接⼝,使得⼦系统更易于使⽤.
门面模式主要包含2种角色: 外观角色(Facade):也称门面角色,系统对外的统⼀接口. 子系统角色(SubSystem):可以同时有⼀个或多个SubSystem.每个SubSytem都不是⼀个单独的类, 而是⼀个类的集合.SubSystem并不知道Facade的存在,对于SubSystem而⾔,Facade只是另⼀个 客户端而已(即Facade对SubSystem透明)
⽐如去医院看病,可能要去挂号,门诊,化验,取药,让患者或患者家属觉得很复杂,如果有提供接待⼈
员,只让接待⼈员来处理,就很方便.
门面模式的实现
场景:回家,我们会开各个屋的灯.离开家时,会关闭各个屋的灯 如果家⾥设置⼀个总开关,来控制整个屋的灯就会很方便.
门面模式的优点
• 减少了系统的相互依赖.实现了客户端与子系统的耦合关系,这使得子系统的变化不会影响到调⽤它
的客户端;
• 提高了灵活性,简化了客户端对子系统的使用难度,客户端无需关心子系统的具体实现方式,而只需
要和门面对象交互即可.
• 提高了安全性.可以灵活设定访问权限,不在门面对象中开通⽅法,就无法访问
四. SLF4J框架
SLF4J就是其他日志框架的门面.SLF4J可以理解为是提供日志服务的统⼀API接⼝,并不涉及到具体的
日志逻辑实现.
不引入日志门面
常见的日志框架有log4J,logback等.如果⼀个项目已经使用了log4j,而你依赖的另⼀个类库,假如是
ApacheActiveMQ,它依赖于另外⼀个日志框架logback,那么你就需要把logback也加载进去.

存在问题:
- 不同日志框架的API接⼝和配置⽂件不同,如果多个日志框架共存,那么不得不维护多套配置⽂件(这
个配置⽂件是指用户⾃定义的配置⽂件). - 如果要更换日志框架,应用程序将不得不修改代码,并且修改过程中可能会存在⼀些代码冲突.
- 如果引⼊的第三⽅框架,使用了多套,那就不得不维护多套配置.
引入日志门面
引⼊门面日志框架之后,应⽤程序和日志框架(框架的具体实现)之间有了统⼀的API接⼝(门面日志框架
实现),此时应⽤程序只需要维护⼀套日志⽂件配置,且当底层实现框架改变时,也不需要更改应⽤程序代
码
SLF4J就是这个日志门面.
总的来说,SLF4J使你的代码独立于任意⼀个特定的日志API,这是⼀个对于开发API的开发者很好的思
想.
总结
- 日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题,SpringBoot内容了日志框
架,默认情况下使用的是info日志级别将日志输出到控制台的,我们可以通过lombok提供的
@Slf4j 注解和 log 对象快速的打印自定义日志. - 日志包含6个级别,日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称
或保存目录来将日志持久化
相关文章:
【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 Spring Boot 日志一. 日志的概念?…...
ISTQB选择国内版,还是国际版呢
1, ISTQB简介 ISTQB(International Software Testing Qualifications Board)是一个国际软件测试资格认证机构,旨在提供一个统一的软件测试认证标准。ISTQB成立于2002年,是非盈利性的组织,由世界各地的国家或地区软件测…...
头歌-机器学习 第11次实验 softmax回归
第1关:softmax回归原理 任务描述 本关任务:使用Python实现softmax函数。 相关知识 为了完成本关任务,你需要掌握:1.softmax回归原理,2.softmax函数。 softmax回归原理 与逻辑回归一样,softmax回归同样…...
Qt for MCUs 2.7正式发布
本文翻译自:Qt for MCUs 2.7 released 原文作者:Qt Group高级产品经理Yoann Lopes 翻译:Macsen Wang Qt for MCUs的新版本已发布,为Qt Quick Ultralite引擎带来了新功能,增加了更多MCU平台的支持,并且我们…...
共享IP和独享IP如何选择,两者有何区别?
有跨境用户在选择共享IP和独享IP时会有疑问,不知道该如何进行选择,共享IP和独享IP各有其特点和应用场景,选择哪种方式主要取决于具体需求和预算。以下是对两者的详细比较: 首先两者的主要区别在于使用方式和安全性:共…...
文心一言VSchatGPT4
文心一言和GPT-4各有优势,具体表现在不同的测试场景下。 在某些测试场景中心一言的表现优于GPT-4,例如在故事的完整度和情节吸引力方面,文心一言表现得更加符合指令,情节更吸引人。这可能得益于其模型在训练时对中文语境的深入理…...
Linux 目录结构与基础查看命令
介绍 目录结构如下 /bin:存放着用户最经常使用的二进制可执行命令,如cp、ls、cat等。这些命令是系统管理员和普通用户进行日常操作所必需的。 /boot:存放启动系统使用的一些核心文件,如引导加载器(bootstrap loader…...
【matlab】如何解决打开缓慢问题(如何让matlab在十几秒内打开)
【matlab】如何解决打开缓慢问题(如何让matlab在十几秒内打开) 找到我们解压缩时Crack中的license_standalone.lic文件,将其拷贝 在安装matlab的路径下新建一个文件,粘贴上面的license_standalone.lic文件 在桌面鼠标移动到matl…...
【stata】求滚动波动情况
0.计算对象 计算 t t t、 t 1 t1 t1、 t 2 t2 t2 这三起滚动波动情况 V o l i , t l n ( ∑ n t n t 2 ( g n − g ˉ ) 2 3 ) Vol_{i,t} ln(\sqrt{\frac{\sum_{nt}^{nt2}(g_{n}-\bar{g})^2}{3}}) Voli,tln(3∑ntnt2(gn−gˉ)2 ) e . g e.g e.g: 假设 200…...
The C programming language (second edition,KR) exercise(CHAPTER 2)
E x c e r c i s e 2 − 1 Excercise\quad 2-1 Excercise2−1:输出结果如图1和图2所示,这道练习题需要文章1和文章2的知识。 #include <stdio.h> #include <limits.h>float getFloat(char sign, unsigned char exp, unsigned mantissa); do…...
rust实现循环链表
作为一个计算机技术专家,针对你的问题,我将首先解释如何使用Rust语言实现循环链表,并提供相应的代码示例。然后,我将解释一个可能的报错问题及其解决方法。 循环链表的实现 在Rust中实现循环链表,首先需要定义链表节…...
2. Spring的创建和Bean的存取
经过前面的学习我们已经大体明白了 IOC 思想以及它的实现方式 DI ,本节要讲的是如何Spring框架实现实现DI。 本节目标: Spring(Core) 项目创建将对象存储到 Spring 中将对象(bean)从 Spring 中取出 1. 创建 Spring 项目 与开篇演示的 Spring Boot 项目不…...
策略模式【行为模式C++】
1.概述 策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。 策略模式通常应用于需要多种算法进行操作的场景,如排序、搜索、数据压缩等。在这些情况下&#x…...
php中session相关知识(目前了解部分)
#记录学习知识 一.ini_set() 在PHP中,ini_set() 函数用于在脚本运行时设置指定的配置选项的值。这些配置选项可以是PHP的核心设置,例如文件上传的最大大小、脚本的最大执行时间、错误报告级别等。使用 ini_set() 可以临时改变PHP.ini文件中的设置&am…...
从零实现诗词GPT大模型:GPT是怎么生成内容的?
专栏规划: https://qibin.blog.csdn.net/article/details/137728228 再开始编写GPT之前,我们得对GPT是怎么生成内容的有一个大致的了解。目前的神经网络我们大多都可以看成是一个黑盒,即我们把数据输送给网络后,网络给我我们输出,我们可以不用关心这个黑盒里到底是怎么实现…...
8路HDMI+8路AV高清视频流媒体编码器JR-3218HD
产品简介: JR-3218HD高清音视频编码产品支持8路高清HDMI音视频采集功能,8路AV视频采集功能,8路3.5MM独独立音频接口采集功能。编码输出双码流H.264格式,音频MP3/AAC格式。编码码率可调,画面质量可控制。支持HTTP/RTSP…...
LangChain入门:14.LLMChain:最简单的链的使用
摘要 本文将介绍LangChain库中LLMChain工具的使用方法。LLMChain将提示模板、语言模型(LLM)和输出解析器整合在一起,形成一个连贯的处理链,简化了与语言模型的交互过程。我们将探讨LLMChain的技术特点、应用场景以及它解决的问题…...
深入理解k8s kube-proxy
1、概述 我觉得只要大家知道kube-proxy是用来配置网络规则的而不是转发流量的,真正的流量由iptables/ipvs来转发就可以了。 网络是k8s的一个关键部分。理解k8s中网络组件如何工作可以帮助更好的设计和配置我们的应用。 kube-proxy就是K8s网络的核心组件。它把我们…...
Spark-机器学习(1)什么是机器学习与MLlib算法库的认识
从这一系列开始,我会带着大家一起了解我们的机器学习,了解我们spark机器学习中的MLIib算法库,知道它大概的模型,熟悉并认识它。同时,本篇文章为个人spark免费专栏的系列文章,有兴趣的可以收藏关注一下&…...
java的正则表达式校验,包含了中国几乎所有运营商手机号码的校验格式
时间2024年4月14日22:25:00 代码 String PHONE_REGEX "^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\\d{8}$";解释 这个Java代码段定义了一个常量 PHONE_REGEX,它包含了一个正则表达式,用于匹配中国大陆的手机号码。下面是对这…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

