【Spring框架全系列】SpringBoot配置日志文件
🍧🍧哈喽,大家好,我是小浪。那么上篇博客我们学习了SpringBoot配置文件的相关操作,本篇博客我们将学习一个新的知识点,SpringBoot日志文件。🖥🖥
📲目录
一、日志是什么,有什么作用?
二、如何看到日志文件?
三、如何自定义日志打印
1、在程序中得到⽇志对象
2、使用日志对象提供的内置方法来打印日志
四、日志级别
1、日志级别有什么作用?
2、日志的级别分类;
3、日志级别的设置
4、日志持久化
五、更简单的日志输出
六、在原有项目添加lombok
一、日志是什么,有什么作用?
二、如何看到日志文件?
🌇我们的springboot项目启动的时候在控制台就有日志输出:
🎇通过运行结果我们可以观察到:
三、如何自定义日志打印
1、在程序中得到⽇志对象
在程序中获取日志对象需要使⽤⽇志工厂 LoggerFactory,语法如下:
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
注意这里Logger选择这个slf4j包下的,不要导错包;

2、使用日志对象提供的内置方法来打印日志
package com.example.demo.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@RequestMapping("/user")
@Controller
@ResponseBody //用来设置当前类中所有的方法返回的是数据而非页面
public class UserController {//1、得到日志对象private static final Logger logger = LoggerFactory.getLogger(UserController.class);@RequestMapping("/hello")public String Hi(){// 写日志logger.trace("我是 trace");logger.debug("我是 debug");logger.info("我是 info");logger.warn("我是 warn");logger.error("我是 error");return "hello SpringBoot";}
}
2、在resources包下新建一个yml文件,写上端口号,自己取就可以;

3、运行启动类DemoApplication;

4、在浏览器输入对应的url地址来访问;http://localhost:1234/user/hello ,按下回车:

OK,这个时候再回到我们的idea控制台观察运行结果:

那么问题来了,我们写的代码是要打印五个,我们发现结果只打印了三个,那么trace和debug去哪里了呢?那就要来到我们下一个目录的内容了,日志的级别;
四、日志级别
1、日志级别有什么作用?
1、日志级别可以帮你筛选出重要的信息,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。
2、日志级别可以控制不同环境下,一个程序是否需要打印日志,如开发环境我们需要很详细的信息而生产环境为了保证性能和安全性就会输入尽量少的日志,而通过日志的级别就可以实现此需求;
2、日志的级别分类;
对应日志级别的顺序:

即越往上接收到的消息就越少,如设置了 warn 就只能收到 warn、error、fatal 级别的⽇志;
3、日志级别的设置
1、日志级别我们需要在配置文件application.yml中设置即可,这里我们在生产环境下的配置文件中设置日志的级别为debug:
logging:level:root: debug
2、运行启动类,这时候控制台会打印很多日志;

3、在浏览器访问一下,点击这个刷新按钮即可;

4、再次回到我们的idea,观察运行结果;

那么,不仅可以对全局的类进行设置,还可以针对指定的包下的类进行设置日志的级别:

4、日志持久化
3、查看刚设置的日志文件目录下是否生成了日志文件;

4、OK,我们打开来看一下,写入了哪些日志内容;

要注意,这里我们如果在sayHi方法里面给出System.out.println来打印一行内容,那么是不会写入到日志文件当中的,也就是说System.out.println打印的日志是不能够持久化的。
5、我们还可以配置日志文件的文件名;
name: D:\Spirng框架\Spirng_GO\Spring_Learn\springboot项目\logs\springboot-1.logs 运行结果:

五、更简单的日志输出
在线演示:首先我们在controller包下新建一个AriticleController类:
package com.example.demo.controller;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ResponseBody
@RequestMapping("/art")
@Slf4j
public class ArticleController {// // 1.得到日志对象
// private static final Logger logger = LoggerFactory.getLogger(ArticleController.class);@RequestMapping("/hi")public String sayHi() {log.trace("我是 slf4j 的 trace");log.debug("我是 slf4j 的 debug");log.info("我是 slf4j 的 info");log.error("我是 slf4j 的 error");return "Hi,Article Info.";}}
注意注解@Slf4j已经添加,添加之后,我们便直接可以使用log对象,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名;
跟之前一直,运行启动类,然后去浏览器访问我们的url地址;

idea控制台打印的信息:

对应的相应目录,观察记录下来的日志:

六、在原有项目添加lombok
那么有的小伙伴创建springboot项目的时候可能没有添加lombok依赖,但是现在想在当前项目添加lombok依赖,以便于实现更简单的日志打印,如何操作呢?
1、首先我们需要装一个插件EditStarters;

2、安装完成之后,在我们的配置文件application.yml中鼠标右键,找到Generate;

3、点击EditStarters;

4、找到lombok选中,点击OK;

🌁OK,那么springboot日志文件的相关内容就到这里啦,创作不易,还请三连一波,感谢支持,我们下期再见啦!!💡💡
相关文章:
【Spring框架全系列】SpringBoot配置日志文件
🍧🍧哈喽,大家好,我是小浪。那么上篇博客我们学习了SpringBoot配置文件的相关操作,本篇博客我们将学习一个新的知识点,SpringBoot日志文件。🖥🖥 📲目录 一、日志是什么…...
事务 ---MySQL的总结(六)
事务 多进程进行并改变同一个数据,如果没有进行版本控制,就会出现数据不确定的问题,为此引入了事务的概念。可以进行数据回滚,解决潜在的问题。 事务的概念 一组的DML组成,这一些的DML要么同时成功,要么同…...
22 标准模板库STL之容器适配器
概述 提到适配器,我们的第一印象是想到设计模式中的适配器模式:将一个类的接口转化为另一个类的接口,使原本不兼容而不能合作的两个类,可以一起工作。STL中的容器适配器与此类似,是一个封装了序列容器的类模板,它在一般序列容器的基础上提供了一些不同的功能和接口。之所…...
目标检测YOLO实战应用案例100讲-基于深度学习的自动驾驶目标检测算法研究
目录 基于深度学习的自动驾驶目标检测算法研究 相关理论基础 2.1 卷积神经网络基本原理...
服务网关Gateway
前言 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 破坏了服务无状态…...
(4)定时器
51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成 作用: 用于计时系统替代长时间Delay,提高运行效率和速度任务切换 STC89C52定时器资源: 定时器个数:3个(T0,T1,T2…...
项目实现读写分离操作(mysql)
读写分离 1.问题说明 2.读写分离 Master(主库)----(数据同步)—> Slave(从库) Mysql主从复制 mysql主从复制 介绍 mysql主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台…...
VP记录:Educational Codeforces Round 148 (Rated for Div. 2) A~D1
传送门:CF 前题提要:本人临近期中,时间较紧,且关于D2暂时没有想到优化算法,因此准备留着以后有时间再继续解决 A题:A. New Palindrome 简单的模拟题,考虑记录每一个字母出现的次数.很容易发现奇数次的数字只能出现一次.因为最多只能在正中间放一个.并且因为不能和初始字符相…...
无线模块|如何选择天线和设计天线电路
无线模块的通信距离是一项重要指标,如何把有效通信距离最大化一直是大家疑惑的问题。本文根据调试经验及对天线的选择与使用方法做了一些说明,希望对工程师快速调试通信距离有所帮助。 一、天线的种类 随着技术的进步,为了节省研发周期&…...
(11)LCD1602液晶显示屏
LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符,自带芯片扫描 显示容量:162个字符,每个字符…...
类和对象下
文章目录 一、初始化列表1、语法:2、初始化顺序 二、static成员三、友元1、友元函数2、友元类 四、拷贝对象时的编译器优化例1、例2、例3、 一、初始化列表 1、语法: 初始化列表: 以一个冒号开始,接着是一个以逗号分隔的数据成员…...
【云计算•云原生】4.云原生之什么是Kubernetes
文章目录 Kubernetes概念Kubernetes核心概念集群podConfigMap Kubernetes架构master节点的组件worker节点组件 Kubernetes网络架构内部网络外部网络 k8s各端口含义 Kubernetes概念 K8S就是Kubernetes,Kubernetes首字母为K,末尾为s,中间一共有…...
云厂商降价潮背后:来中小企业战场「拼刺刀」
如果说过往云厂商的降价打响的是从C端进军B端的营销战,那么在这一轮降价潮背后,对应的则是云厂商从大型KA客户向中小企业进军的信号,强被集成,强获客。 云厂商又一轮降价潮袭来。 5月16日,移动云宣布部分产品线最高降…...
2-单片机GPIO相关知识点及流水灯和按键采集小实验
目录 小问题 :单片机上电后第一个执行的程序是? 【1】GPIO 1.定义 2.应用 I - Input 输入采集 O - Output 输出控制 3.GPIO结构框图 4.功能描述 输入功能 5.相关寄存器 【2】输出控制实验 实验:点亮一盏LED灯 1.实验…...
基础知识(王爽老师书第一章)
文章目录 基础知识1.1 引言1.2 机器语言1.2 引言汇编语言的产生1.3 汇编语言的组成1.4 存储器1.5 指令和数据1.6 存储单元1.7 CPU对存储器的读写1.8 地址总线1.9 数据总线1.10 控制总线小结检测点1.11.11 内存地址空间1.12 主板1.13 接口卡1.14 各类存储器芯片1.15 内存地址空间…...
非煤矿山电子封条建设算法 yolov8
非煤矿山电子封条建设算法模型通过yolov8网络模型AI视频智能分析技术,算法模型对作业状态以及出井入井人员数量变化、人员睡岗离岗等情况实时监测分析,及时发现异常动态,自动推送生成的违规截图报警信息。现代目标检测器大部分都会在正负样本…...
七大软件架构设计原则详解
目录 1、概述 2、七大设计原则 2.1、开闭原则 2.2、里氏替换原则 2.3、依赖倒置原则 2.4、单一职责原则 2.5、接口隔离原则 2.6、迪米特法则 2.7、合成复用原则 3、最后 VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&…...
【Python入门】Python循环语句(while循环的嵌套应用)
前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函…...
数据来源和搜集
数据搜集 文章目录 数据搜集1 数据来源1.1 数据的间接来源1.2 间接数据的评价1.3 数据的直接来源 2 调查数据2.1概率抽样2.2 非概率抽样2.3 概率抽样 *vs.*非概率抽样 3 搜集数据的方法4 实验数据4.1 实验组与对照组4.2 实验中的若干问题 1 数据来源 所有统计数据都来源于社会…...
Python入门(七)if语句(二)
if语句(二) 1.if语句1.1 简单的if语句1.2 if-else语句1.3 if-elif-else结构1.4 使用多个elif代码块1.5 使用多个elif代码块 2.使用if语句处理列表2.1 检查特殊元素2.2 确定列表不是空的2.3 使用多个列表 作者:xiou 1.if语句 前面我们理解了…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...
