【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 日志的格式

在这里插入图片描述
从上图可以看到,日志输出内容元素具体如下:

  1. 时间日期:精确到毫秒
  2. 日志级别:ERROR,WARN,INFO,DEBUG或TRACE
  3. 进程ID
  4. 线程名
  5. Logger名(通常使用源代码的类名)
  6. 日志内容
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也加载进去.
在这里插入图片描述
存在问题:

  1. 不同日志框架的API接⼝和配置⽂件不同,如果多个日志框架共存,那么不得不维护多套配置⽂件(这
    个配置⽂件是指用户⾃定义的配置⽂件).
  2. 如果要更换日志框架,应用程序将不得不修改代码,并且修改过程中可能会存在⼀些代码冲突.
  3. 如果引⼊的第三⽅框架,使用了多套,那就不得不维护多套配置.
    引入日志门面
    引⼊门面日志框架之后,应⽤程序和日志框架(框架的具体实现)之间有了统⼀的API接⼝(门面日志框架
    实现),此时应⽤程序只需要维护⼀套日志⽂件配置,且当底层实现框架改变时,也不需要更改应⽤程序代
    在这里插入图片描述
    SLF4J就是这个日志门面.
    总的来说,SLF4J使你的代码独立于任意⼀个特定的日志API,这是⼀个对于开发API的开发者很好的思
    想.

总结

  1. 日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题,SpringBoot内容了日志框
    架,默认情况下使用的是info日志级别将日志输出到控制台的,我们可以通过lombok提供的
    @Slf4j 注解和 log 对象快速的打印自定义日志.
  2. 日志包含6个级别,日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称
    或保存目录来将日志持久化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/308878.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 网络排查命令

端口相关服务检查 netstat -ntpl|grep [$Port]说明&#xff1a;[$Port]为相应的端口号。 0.0.0.0代表本机上可用的任意地址。比如&#xff0c;0.0.0.0:80表示本机上所有地址的80端口。 tcp 0.0.0.0:80表示在所有的可用接口上监听TCP的80端口 如果返回结果为空&#xff0c;说明…

MySQL 社区版 安装总结

很早就安装过MySQL&#xff0c;没有遇到过什么问题&#xff0c;直接next就行了&#xff0c;这次在新电脑上安装却遇到了一些问题&#xff0c;记录一下。 安装的是MySQL社区版&#xff0c;下载地址是www.mysql.com&#xff0c;进入后选择DOWNLOAD页面&#xff0c;选择MySQL Com…

minikube环境搭建

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…

贝乐虎儿歌v6.8.0解锁高级版亲子学习儿歌

软件介绍 贝乐虎儿歌免费版app&#xff0c;出自乐擎网络的创意工坊&#xff0c;专为孩子们雕琢了一系列富含创意的动画儿歌内容。这款app通过贝乐虎兄弟的可爱形象&#xff0c;让孩子们在愉快的观看中接触到各种儿歌和故事。不仅如此&#xff0c;app还巧妙地将古诗、英语等学习…

什么是享元模式,有哪些具体应用

一、定义 享元模式是一种通过尽可能多地共享数据来最小化内存使用和对象数量&#xff0c;从而提高性能的设计模式。在享元模式中&#xff0c;如果需要相同数据的多个对象&#xff0c;则共享这些对象而不是创建新的对象&#xff0c;从而提高系统的效率。 其实有很多应用场景&am…

软件设计师——软件工程基础知识

软件工程基础知识 软件过程软件过程模型软件测试方法进度管理软件复杂性度量环路复杂度耦合聚合和组合 软件过程 软件过程模型 软件测试方法 黑盒测试和白盒测试 白盒测试中&#xff0c;语句覆盖对程序执行逻辑的覆盖很低&#xff0c;因此一般认为它是很弱的逻辑覆盖。 进度管…

全新视频剪辑软件会声会影2024

会声会影 (CyberLink PowerDirector) 是一款既强大又易于使用的视频编辑软件&#xff0c;具有众多功能和工具&#xff0c;专为用户设计制作高质量的视频剪辑和制作。无论您是一个新手或是一个有经验的电影制作者&#xff0c;会声会影都适合您的需要。 生活即电影 下载地址&…

了解大语言模型的参数高效微调(Parameter-Effcient Fine-Tuning)

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 大语言模型在众多应用领域实现了突破性的进步&#xff0c;显著提升了各种任务的完成度。然而&#xff0c;其庞大的规模也带来了高昂的计算成本。这些模型往往包含数十亿甚至上千亿参数&#xff0c;需要…

快速上手Vue

目录 概念 创建实例 插值表达式 Vue响应式特性 概念 Vue是一个用于 构建用户界面 的 渐进式 框架 构建用户界面&#xff1a;基于数据渲染出用户看到的页面 渐进式&#xff1a;Vue相关生态&#xff1a;声明式渲染<组件系统<客户端路由<大规模状态管理<构建工具 V…

SpringBoot多模块项目整合Shiro报错No bean of type ‘org.apache.shiro.realm.Realm‘ found.

环境 依赖版本 spring-boot-dependencies 2.7.6 shiro-spring-boot 1.13.0 问题 项目启动报错 *************************** APPLICATION FAILED TO START ***************************Description:No bean of type org.apache.shiro.realm.Realm found.Action:Please …

SecureCRT日志记录的7个经典配置记录与14个环境变量(%Y-%M-%D_%H_%S_session.log %t )

每次更换电脑、主机或者环境都需要配置一遍SecureCRT的参数。感觉就最近十年都已经设置过上百次了。其实设置没什么特别的&#xff0c;只是经过不断地打磨&#xff0c;主打的就是一个经济实用。经常忘记&#xff0c;特此记录。 配置方式 建议直接配置默认session&#xff1a;…

如何正确使用数字化仪前端信号调理?(一)

一、前言 板卡式的数字转换器和类似测量仪器&#xff0c;比如图1所示的德思特TS-M4i系列&#xff0c;都需要为各种各样的特性信号与内部模数转换器&#xff08;ADC&#xff09;的固定输入范围做匹配。 图1&#xff1a;德思特TS-M4i系列高速数字化仪&#xff0c;包括2或4通道版…

系统架构最佳实践 -- CRM会员客户关系管理系统架构的设计

在现代商业中&#xff0c;企业与客户之间的关系至关重要。为了更好地管理和维护客户关系&#xff0c;许多企业采用CRM&#xff08;Customer Relationship Management&#xff09;系统。本篇博客将介绍CRM会员客户关系管理系统的架构设计及实践&#xff0c;探讨其核心组成和关键…

MySQL limit N offset M 速度慢?来实际体验下

直接开始 有一张表&#xff1a;trade_user&#xff0c;表结构如下&#xff1a; mysql> desc trade_user; ------------------------------------------------------------------ | Field | Type | Null | Key | Default | Extra | -------------…

第十届蓝桥杯省赛真题(C/C++大学B组)

目录 试题 A: 组队 试题 B: 年号字串 试题 C: 数列求值 试题 D: 数的分解 试题 E: 迷宫 试题 F: 特别数的和 试题 G&#xff1a;完全二叉树的权值 试题 H&#xff1a;等差数列 试题 I&#xff1a;后缀表达式&#xff08;不一定对&#xff09; 试题 J&#xff1a;灵能…

数据库的事务的并发问题和四种隔离级别

1. 数据并发问题 MySQL是一个客户端/服务器架构的软件&#xff0c;可以有若干个客户端与之连接&#xff0c;连接上之后&#xff0c;就可以称之为一个会话&#xff08;Session&#xff09;&#xff0c;对于服务器来说可能同时处理多个Session&#xff0c;也就是对服务器来说可能…

element-ui中el-radio-group组件绑定点击事件触发多次的解决办法

1、需求 电商首页需求&#xff0c;需要做个单选框&#xff0c;然后点击选中切换图标方向及更换价格升倒序&#xff0c;如下图&#xff1a; 从官网文档看&#xff0c;单选框支持change event&#xff0c;使用click加载按钮处不会触发选中 但是使用 click.native 事件不做处理…

LeetCode 2924.找到冠军 II:脑筋急转弯——只关心入度

【LetMeFly】2924.找到冠军 II&#xff1a;脑筋急转弯——只关心入度 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-champion-ii/ 一场比赛中共有 n 支队伍&#xff0c;按从 0 到 n - 1 编号。每支队伍也是 有向无环图&#xff08;DAG&#xff09; 上的一个节…

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&#xff1a;输出结果如图1和图2所示&#xff0c;这道练习题需要文章1和文章2的知识。 #include <stdio.h> #include <limits.h>float getFloat(char sign, unsigned char exp, unsigned mantissa); do…

【Django开发】0到1美多商城项目md教程第7篇:登录,1. 互联开发者申请步骤【附代码文档】

美多商城完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;欢迎来到美多商城&#xff01;&#xff0c;项目准备。展示用户注册页面&#xff0c;创建用户模块子应用。用户注册业务实现&#xff0c;用户注册前端逻辑。图形验证码&#xff0c;图形验证码接口设…