【Spring Boot】日志文件
日志文件
- 一. 日志文件有什么用
- 二. 日志怎么用
- 三. ⾃定义⽇志打印
- 1. 在程序中得到⽇志对象
- 2. 使⽤⽇志对象打印⽇志
- 3. ⽇志格式说明
- 四. 日志级别
- 1. ⽇志级别有什么⽤
- 2. ⽇志级别的分类与使⽤
- 五. 日志持久化
- 六. 更简单的⽇志输出—lombok
- 1. 添加 lombok 依赖
- 2. 输出⽇志
- 3. lombok 原理
- 2. lombok 更多注解说明
一. 日志文件有什么用
- 最主要的⽤途就是排除和定位问题。除了发现和定位问题之外,我们还可以通过⽇志实现以下功能:
- 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
- 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
- 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。
二. 日志怎么用
Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示:

通过上述⽇志信息我们能发现以下 3 个问题:
- Spring Boot 内置了⽇志框架(不然也输出不了⽇志)。
- 默认情况下,输出的⽇志并⾮是开发者定义和打印的,那开发者怎么在程序中⾃定义打印⽇志呢?
- ⽇志默认是打印在控制台上的,⽽控制台的⽇志是不能被保存的,那么怎么把⽇志永久的保存下来呢?
三. ⾃定义⽇志打印
开发者⾃定义打印⽇志的实现步骤:
- 在程序中得到⽇志对象。
- 使⽤⽇志对象的相关语法输出要打印的内容。
1. 在程序中得到⽇志对象
在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory
// 1.得到⽇志对象private static Logger logger = LoggerFactory.getLogger(UserController.class);
注意:
- ⽇志⼯⼚需要将每个类的类型传递进去,这样我们才知道⽇志的归属类,才能更⽅便、更直观的定位到问题类。
- Logger 对象是属于 org.slf4j 包下的,不要导⼊错包。
因为 Spring Boot 中内置了⽇志框架 Slf4j,所以咱们可以直接在程序中调⽤ slf4j 来输出⽇志。
常⻅的⽇志框架:

2. 使⽤⽇志对象打印⽇志
⽇志对象的打印⽅法有很多种,我们可以先使⽤ info() ⽅法来输出⽇志,如下代码所示:
// 2.使⽤⽇志打印⽇志logger.info("--------------要输出⽇志的内容----------------");
3. ⽇志格式说明

四. 日志级别
1. ⽇志级别有什么⽤
- ⽇志级别可以帮你筛选出重要的信息,⽐如设置⽇志级别为 error,那么就可以只看程序的报错⽇志了,对于普通的调试⽇志和业务⽇志就可以忽略了,从⽽节省开发者信息筛选的时间。
- ⽇志级别可以控制不同环境下,⼀个程序是否需要打印⽇志,如开发环境我们需要很详细的信息,⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志,⽽通过⽇志的级别就可以实现此需求。
2. ⽇志级别的分类与使⽤
- trace:微量,少许的意思,级别最低;
- debug:需要调试时候的关键信息打印;
- info:普通的打印信息(默认⽇志级别);
- warn:警告,不影响使⽤,但需要注意的问题;
- error:错误信息,级别较⾼的错误⽇志信息;
- fatal:致命的,因为代码异常导致程序退出执⾏的事件。

级别越高接收到的消息就越少,只能收到高于或者等于该级别的日志。如设置了 warn 就只能收到 warn、error、fatal 级别的⽇志了。
⽇志级别设置:
⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可,如下所示:
logging:level:root: error # 配置根路径的(全局)⽇志级别
logging:level:com:example:controller: trace # 局部日志设置,位置从 java 包开始,且一般精准到包,不会精准到类,若同时出现全局和局部,则以局部为准
进行日志输出:
@RestController
@RequestMapping("/user")
public class UserController {// 1.得到⽇志对象private static Logger logger =LoggerFactory.getLogger(UserController.class);@Value("${server.port}")private String port;@Value("${spring.datasource.url}")private String url;@RequestMapping("/sayhi")public String sayHi() {// 2.使⽤⽇志打印⽇志logger.trace("================= trace ===============");logger.debug("================= debug ===============");logger.info("================= info ===============");logger.warn("================= warn ===============");logger.error("================= error ===============");return "Hi," + url;}
}
⽇志的输出级别,默认是 info.
五. 日志持久化
以上的⽇志都是输出在控制台上的,然⽽在⽣产环境上咱们需要将⽇志保存下来,以便出现问题之后追溯问题,把⽇志保存下来的过程就叫做持久化。
想要将⽇志进⾏持久化,只需要在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后,Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。
配置⽇志⽂件的保存路径:
logging:file:path: D:\\DevelopTool\\JAVA #自动创建目录
配置⽇志⽂件的⽂件名:
logging:file:name: D:\\DevelopTool\\JAVA\\spring-1004.log # 文件存在则会续写,不会覆盖 默认每个文件大小为 10MB, 大于 10MB 则分为多个文件,可以自己设置
存储结果:

六. 更简单的⽇志输出—lombok
每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐,使⽤ lombok 来更简单的输出。
- 添加 lombok 框架⽀持。
- 使⽤ @slf4j 注解输出⽇志。
1. 添加 lombok 依赖
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><optional>true</optional></dependency>
2. 输出⽇志
@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {@RequestMapping("/log")public void loggerTest() {log.error("------------------- error -----------------");}
}
注意:使⽤ @Slf4j 注解,在程序中使⽤ log 对象即可输⼊⽇志,并且只能使⽤ log 对象才能输出,这是 lombok 提供的对象名。
3. lombok 原理
lombok 能够打印⽇志的原理就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录如下:

可以发现 lombok 其实只是方便了我们编写,并不会有什么性能的提升,它的原理就是在编译前将注解替换为对应的代码。
Java 程序的运⾏原理:

Lombok 的作⽤如下图所示:

2. lombok 更多注解说明
基本注解
| 注解 | 作⽤ |
|---|---|
| @Getter | ⾃动添加 getter ⽅法 |
| @Setter | ⾃动添加 setter ⽅法 |
| @ToString | ⾃动添加 toString ⽅法 |
| @EqualsAndHashCode | ⾃动添加 equals 和 hashCode ⽅法 |
| @NoArgsConstructor | ⾃动添加⽆参构造⽅法 |
| @AllArgsConstructor | ⾃动添加全属性构造⽅法,顺序按照属性的定义顺序 |
| @NonNull | 属性不能为 null |
| @RequiredArgsConstructor | ⾃动添加必需属性的构造⽅法,final + @NonNull 的属性为必需 |
组合注解
| 注解 | 作⽤ |
|---|---|
| @Data | @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor |
⽇志注解
| 注解 | 作⽤ |
|---|---|
| @Slf4j | 添加⼀个名为 log 的⽇志,使⽤ slf4j |
好啦! 以上就是 SpringBoot ⽇志⽂件 的讲解,希望能帮到你 !
评论区欢迎指正 !
相关文章:
【Spring Boot】日志文件
日志文件 一. 日志文件有什么用二. 日志怎么用三. ⾃定义⽇志打印1. 在程序中得到⽇志对象2. 使⽤⽇志对象打印⽇志3. ⽇志格式说明 四. 日志级别1. ⽇志级别有什么⽤2. ⽇志级别的分类与使⽤ 五. 日志持久化六. 更简单的⽇志输出—lombok1. 添加 lombok 依赖2. 输出⽇志3. lom…...
图像处理与计算机视觉--第五章-图像分割-Canny算子
文章目录 1.边缘检测算子分类2.Canny算子核心理论2.1.Canny算子简单介绍2.2.Canny算子边缘检测指标2.3.Canny算子基本原理 3.Canny算子处理流程3.1.高斯滤波去噪声化3.2.图像梯度搜寻3.3.非极大值抑制处理3.4.双阈值边界处理3.5.边界滞后技术跟踪3.6.Canny算子边缘检测的特点 4…...
LabVIEW开发教学实验室自动化INL和DNL测试系统
LabVIEW开发教学实验室自动化INL和DNL测试系统 如今,几乎所有的测量仪器都是基于微处理器的设备。模拟输入量在进行数字处理之前被转换为数字量。对于参加电气和电子测量课程的学生来说,了解ADC以及如何欣赏其性能至关重要。ADC的不确定性可以根据其传输…...
数据结构: 数组与链表
目录 1 数组 1.1 数组常用操作 1. 初始化数组 2. 访问元素 3. 插入元素 4. 删除元素 5. 遍历数组 6. 查找元素 7. 扩容数组 1.2 数组优点与局限性 1.3 数组典型应用 2 链表 2.1 链表常用操作 1. 初始化链表 2. 插入节点 3. 删除…...
unity 控制玩家物体
创建场景 放上一个plane,放上一个球 sphere,假定我们的球就是我们的玩家,使用控制键w a s d 来控制球也就是玩家移动。增加一个材质,把颜色改成绿色,把材质赋给plane,区分我们增加的白球。 增加组件和脚…...
指数分布优化器(EDO)(含MATLAB代码)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…...
Java 时间的加减处理
时间的加减处理 Date date new Date(操作时间(类型Date)-(60000*60*1));600001分钟 60000*60*1 1小时...
基于A4988/DRV8825的四路步进电机驱动器
概述 简化板的CNC sheild V3.0,仅保留步进电机速度与方向的控制引脚STEP/DIR、使能端EN、芯片供电VCC\GND,共计11个引脚。PCB四周开设四个M3通孔,以便于安装固定。此外,将板载的焊死的保险丝更改为可更换的保险座保险丝ÿ…...
万字总结网络原理
目录 一、网络基础 1.1认识IP地址 1.2子网掩码 1.3认识MAC地址 1.4一跳一跳的网络数据传输 1.5总结IP地址和MAC地址 二、网络设备及相关技术 2.1集线器:转发所有端口 2.2交换机:MAC地址转换表+转发对应端口 2.3主机:网络分层从上到下封装 2.4主机&路由器:ARP…...
【AI视野·今日CV 计算机视觉论文速览 第262期】Fri, 6 Oct 2023
AI视野今日CS.CV 计算机视觉论文速览 Fri, 6 Oct 2023 Totally 73 papers 👉上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Improved Baselines with Visual Instruction Tuning Authors Haotian Liu, Chunyuan Li, Yuheng Li, Yong Jae Lee大型多模…...
一文搞懂Jenkins持续集成解决的是什么问题
1、持续集成的定义 大师 Martin Fowler 是这样定义持续集成的: 持续集成是一种软件开发实战, 即团队开发成员经常集成他们的工作. 通常, 每个成员每天至少集成一次, 也就意味着每天可能发生多次集成. 持续集成并不能消除Bug, 而是让它们非常容易发现和改正. 根据对项目实战的理…...
微信小程序去除默认滚动条展示
一、微信小程序改版框架升级后,滚动条默认展示了。 在实际应用中效果不好,如果想默认隐藏掉,代码段如下: /* 去除默认滚动条效果 */ ::-webkit-scrollbar {display:none;width:0;height:0;color:transparent; } 设置成全局样式…...
3.02 创建订单操作详细-订单创建与回滚 (创建订单操作详细)
步骤1: 创建orders订单表,子订单表和订单状态表对应的pojo和mappperOrders和OrderItemsMapperOrderItems和OrderItemsMapperOrderStatus和OrderStatusMapper步骤2:创建OrderService和对应的实现类 public interface OrderService {/*** 用于创建订单相关…...
需求放缓、价格战升级、利润率持续恶化对小鹏汽车造成了严重影响
来源:猛兽财经 作者:猛兽财经 收入和每股收益不及预期,亏损创记录 财报显示,小鹏汽车(XPEV)2023年第二季度收入为50.6亿元人民币(合7亿美元),略低于预期,而且还产生了比预期更大的亏…...
《算法通关之路》chapter19解题技巧和面试技巧
《算法通关之路》学习笔记,记录一下自己的刷题过程,详细的内容请大家购买作者的书籍查阅。 1 看限制条件 1.1数据规模 有的题目数据规模较小,那么暴力法就可行;如果暴力法不行,那么再稍微加一个诸如缓存和剪枝的优化…...
什么是TF-A项目的长期支持?
安全之安全(security)博客目录导读 问题:Trusted Firmware-A社区每六个月发布一次代码。然而,对于生产中的平台,该策略在维护、重要软件修复的向后兼容性、获得最新的安全缓解措施和整体产品生命周期管理方面不具备可扩展性。 开源软件项目&…...
【LinuxC】时间、时区,相关命令、函数
文章目录 一、序1.1 时间和时区1.11 时间1.12 时区 1.2 查看时间时区的命令1.21 Windows1.22 Linux 二、C语言函数2.1 通用2.11 函数简介2.12 数据类型简介 2.2 windows 和 Linux特有函数2.3 C语言示例 一、序 1.1 时间和时区 1.11 时间 时间是一种用来描述物体运动变化的量…...
mac清理垃圾的软件有哪些?这三款我最推荐
没错,Mac电脑真的好用,但是清理系统垃圾可不是件容易的事。由于Mac系统的封闭性,系统的缓存垃圾常常隐藏得让人发现不了。不过,别担心!有一些专业的Mac清理软件可以帮你解决这一系列问题,让清理垃圾变得轻松…...
复习Day11:链表part04: 206. 反转链表、92. 反转链表II、25. K 个一组翻转链表、148. 排序链表
我用的方法是在leetcode再过一遍例题,明显会的就复制粘贴,之前没写出来就重写,然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用CLion了,使用leetcode自带的IDE模拟面试环境。 哈希表章节的题目思路很清晰&…...
一年一度的国庆节又结束了
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
