SpringBoot日志详解

news2024/11/15 23:59:47

在这里插入图片描述
⭐️前言⭐️

🍉博客主页: 🍁【如风暖阳】🍁
🍉精品Java专栏【JavaEE进阶】、【JavaEE初阶】、【MySQL】、【数据结构】
🍉欢迎点赞 👍 收藏留言评论 📝私信必回哟😁

🍉本文由 【如风暖阳】 原创,首发于 CSDN🙉

🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

🍉博客中涉及源码及博主日常练习代码均已上传GitHub


请添加图片描述

📍内容导读📍

  • 🍅1.日志及日志的作用
  • 🍅2.自定义日志打印
    • 2.1 得到日志对象
    • 2.2 使用日志对象打印日志
  • 🍅3.日志级别
    • 3.1 日志级别有什么用?
    • 3.2 日志级别的分类
    • 3.3 日志级别的设置
  • 🍅4.日志持久化
  • 🍅5.通过Lombok实现更简单的日志输出
    • 5.1 添加lombok依赖
    • 5.2 输出日志
    • 5.3 lombok更多注解说明
  • 🍅6.总结

🍅1.日志及日志的作用

日志是程序的重要组成部分,如果程序报错了,我们可以打开控制台看日志,来找到报错的原因。

除了发现和定位问题之外,我们还可以通过日志实现以下功能。

  • 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。
  • 记录系统的操作日志,方便数据恢复和定位操作人。
  • 记录程序的执行时间,方便为以后优化程序提供数据支持。

在这里插入图片描述

如图所示,就是SpringBoot的日志打印。

🍅2.自定义日志打印

完成自定义日志的打印需要以下两步:
1、在一个类中先获取到打印日志对象(日志框架提供日志对象,日志框架默认已经集成到SpringBoot中了)
2、使用日志对象提供的方法实现日志的打印

下边具体阐述:

2.1 得到日志对象

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

@Controller
public class UserController {
    private static final Logger log= 
            LoggerFactory.getLogger(UserController.class);
}

日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才能更方便、直观的定位到问题类。

注意:Logger对象是属于org.slf4j包下的,不要导错包
在这里插入图片描述
因为SpringBoot中内置了日志框架Slf4j,所以咱们可以直接在程序中调用slf4j来输出日志。

2.2 使用日志对象打印日志

日志对象的打印方法有很多种,如下代码所示:

@Controller
@ResponseBody
public class UserController {
    //1.先得到日志对象(来自slf4j)
    private static final Logger log=
            LoggerFactory.getLogger(UserController.class);
    @RequestMapping("/sayhi")
    public void sayHi() {
        //2.使用日志对象提供的打印方法进行日志打印
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");
    }
}

运行结果如下图:
在这里插入图片描述
我们可以发现,我们调用了五个方法来进行打印的,但是控制台中只显示了三条我们的打印信息,这是因为有日志级别的约束,默认的日志级别是info级别,只能打印infoinfo以上的日志信息,日志级别的具体详情见下:

🍅3.日志级别

3.1 日志级别有什么用?

  • 日志级别可以帮你筛选出重要的信息,比如设置日志级别为error,那么就可以只看程序的报错日志了,对于普通的调式日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。
  • 日志级别可以控制不同环境下,一个程序是否需要打印日志,如开发环境我们需要很详细的信息,而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求。

3.2 日志级别的分类

日志的级别如下:
1.trace:少许日志(级别最低)
2.debug:调试日志
3.info:普通信息日志(默认日志级别)
4.warn:警告日志
5.error:错误日志
6.fatal:致命的日志(系统输出的日志,不能自定义打印)
在这里插入图片描述

3.3 日志级别的设置

日志级别配置只需要在配置文件中设置logging.level配置项即可,如下所示:
在这里插入图片描述
再次打印日志信息看结果:
在这里插入图片描述
可以发现这次的日志打印信息少了很多,这是因为全局的日志级别是warn,比warn级别低的日志信息不会被打印,而在controller包下设置的日志级别是trace,所以它的五条日志信息都进行了打印。

根据上边的日志打印结果我们可以得出结论:
当存在局部日志级别和全局日志级别时,当访问局部日志时,使用的是局部日志级别,也就是局部日志级别>全局日志级别

🍅4.日志持久化

以上的日志都是打印在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便出现问题之后追溯问题,把日志保存下来的过程就叫做持久化

想要将日志进行持久化,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名,SpringBoot就会将控制台的日志写到相应的目录或文件下了。
在这里插入图片描述
注意\会引起转义,所以可以使用\\或者/来防止转义。
再次运行,可以看到日志信息已经被写到指定的文件中了。
在这里插入图片描述

🍅5.通过Lombok实现更简单的日志输出

我们每次都使用LoggerFactory.getLogger(xxx.class)很繁琐,且每个类都添加一遍,也很麻烦,下边我们展示使用lombok来实现更简单的日志输出。
1.添加lombok框架支持
2.使用@slf4j注解输出日志

5.1 添加lombok依赖

我们可以先下载以下插件:
在这里插入图片描述
然后在pom.xml文件中右键->generate->插件,将lombok依赖引入pom.xml配置文件中
在这里插入图片描述

5.2 输出日志

1、使用@Slf4j得到日志对象log
2、使用log对象自定义打印日志
在这里插入图片描述

5.3 lombok更多注解说明

基本注解:
在这里插入图片描述
组合注解:
在这里插入图片描述
日志注解:
在这里插入图片描述

🍅6.总结

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


⭐️最后的话⭐️
总结不易,希望uu们不要吝啬你们的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rocketMq相关机制

rocketMq相关机制 topic读写队列 perm字段表示Topic的权限。有三个可选项。 2:禁写禁订阅,4:可订 阅,不能写,6:可写可订阅 这其中,写队列会真实的创建对应的存储文件,负责消息写入。…

小蓝本 第一本《因式分解技巧》第四章 拆项与添项 笔记(第四天)

小蓝本 第一本《因式分解技巧》第四章 拆项与添项 笔记(第四天)前言拆项与添项目的方法分组分解走平均分配分组分解走瞄准公式旧事重提第二章公式(9)好题习题4题目题解错题题号改错经验前言 芜湖,坚持做小蓝本的第四天,今天的知识…

基于LSTM、BP神经网络实现电力系统负荷预测(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

房屋装修设计技巧有哪些?有哪些注意事项

拥有自己的家是每个人的愿望,拥有一座新的房子是一种幸福。但是,作为一个装修小白,装修新房是一件很麻烦的事情。那么,房屋装修设计技巧是什么?房屋的装修设计应该注意些什么?下面我将详细解释一下。 房屋装…

pandas数据分析

目录 题目001: 把list变成一个Series 题目002: 把dict变成一个Series 题目003: 把Series转换成list 题目004: 把series变成一个DataFrame 题目005:用numpy创建Series 题目006:转换series的数据类型 …

【亲测可用】2022最新酒桌小游戏喝酒小程序源码_带流量主

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 喝酒神器3.6,原版本没有广告位,修改增加了广告位, 由多个喝酒小游戏组合而成,具体如下: 大话骰(带音效) 愤怒大叔(带音效,多个皮肤模板用户可选择) …

【大数据入门核心技术-ElasticSearch】(二)ElasticSearch整体架构和重要工作原理

目录 一、整体架构图 二、重要工作原理 1、文档写入原理 2、文档检索原理 一、整体架构 二、重要工作原理 1、文档写入原理 1)选择任意一个DataNode发送请求,例如:node2。此时,node2就成为一个coordinating node(…

我也和 chatGPT 聊了聊

我也和 chatGPT 聊了聊,都是因为最近 chatGPT 太火了! 这是一个大型的 AI 语言模型。你不仅可以和它聊天,问它各种各样的问题,还可以让它写代码、写论文、解数学题、解bug,等等。 可以说,chatGPT 是目前最…

软件安全测试-Web安全测试详解-CSRF攻击

1. 什么是CSRF攻击? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造。CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页…

基于java+springmvc+mybatis+jsp+mysql的洗衣店管理系统

项目介绍 洗衣店管理系统是信息时代的产物,它是洗衣店管理的一个好帮手。有了它不再需要繁重的纸质登记,有了它洗衣店管理员不在需要繁重的工作,一些收费标准和干洗业务等基本信息可以由管理人员及时的对信息进行查询、更新、修改和删除&…

【自然语言处理】【ChatGPT系列】大模型的涌现能力

大语言模型的涌现能力《Emergent Abilities of Large Language Models》论文地址:https://arxiv.org/pdf/2206.07682.pdf 相关博客 【自然语言处理】【ChatGPT系列】大模型的涌现能力 【自然语言处理】【文本生成】CRINEG Loss:学习什么语言不建模 【自然…

web前端期末大作业——餐品后台管理系统(html+css+javascript)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

MySQL 日志之 binlog 格式 → 关于 MySQL 默认隔离级别的探讨

背景问题 再讲 binlog 之前,我们先来回顾下主流关系型数据库的默认隔离级别,是默认隔离级别,不是事务有哪几种隔离级别,别会错题意了 1、Oracle、SQL Server 的默认隔离级别是什么,MySQL 的呢 ? 2、为什…

基于C#+SQL Server2008 开发三层架构(WinForm)图书管理系统【100010014】

图书管理系统 一、项目背景及意义 当今由于信息技术的飞速发展,图书馆作为社会知识信息媒介的功能日益重要,网络环境下的信息资源建设知识仓库的设计,开放存取学术交流模式,知识管理系统,智能检索,数字参…

SDE论文阅读

论文链接:Score-Based Generative Modeling through Stochastic Differential Equations 文章目录摘要引文背景基于郎之动力学的去噪分数匹配/SMLD去噪扩散概率模型/DDPMSDEs的基于分数的生成模型SDEs下的受扰动数据逆转SDE生成样本估计SDE的分数例子:VE…

spring——Spring自动装配——示例

1. 不使用自动装配(autowire"no") autowire"no" 表示不使用自动装配&#xff0c;此时我们必须通过 <bean> 元素的 <constructor-arg>和 <property> 元素的 ref 属性维护 Bean 的依赖关系。 2. 按名称自动装配(autowire"byName"…

【Qt入门第38篇】 网络(八)TCP(二)

导语 在上一节里我们使用TCP服务器发送一个字符串&#xff0c;然后在TCP客户端进行接收。在这一节将重新写一个客户端程序和一个服务器程序&#xff0c;这次实现客户端进行文件的发送&#xff0c;服务器进行文件的接收。有了上一节的基础&#xff0c;这一节的内容就很好理解了…

“为什么同样是跳槽,有些人薪资就能翻两三倍?“Java面试八股文是背错了方向吗?

“为什么同样是跳槽&#xff0c;有些人薪资能翻两三倍&#xff1f;” 最近遇到一个朋友跟我吐槽如上&#xff0c;其实类似这样的问题我也听到过很多次&#xff0c;身边也不乏有认识的同事、朋友们通过跳槽拿下高薪&#xff0c;这里我先说一个我身边真实的例子&#xff1a; 学…

智能家居服务发现实现

服务设备软件架构设计 代码复用 将网络通信框架移植到开发板&#xff0c;之后&#xff0c;可以使用框架中的组件实现 Response Task 和 Service Task。 框架移植注意事项 LWIP 是微型 TCP/IP 协议栈 (并非完整 TCP/IP 协议栈) 支持 socket 接口&#xff0c;但一些功能未实现…

面向对象编程的一个例子——减少代码重复

专注系列化、高质量的R语言教程推文索引 | 联系小编 | 付费合集本篇推文缘起于上篇推文plot3D | 三维数据绘图&#xff08;3&#xff09;&#xff1a;mesh函数、surf3D函数、spheresurf3D函数。学堂君在介绍surf3D()函数时举了两个例子。第一个例子是绘制球形&#xff1a;libra…