程序员必会技能—— 使用日志
目录
1、为什么要使用日志
2、自定义日志打印
2.1、在程序中得到日志对象
2.2、使用日志对象打印日志
2.3、日志格式
3、日志的级别
3.1、日志级别的分类
3.2、日志级别的设置
4、持久化日志
5、更简单的日志输出——lombok
5.1、如何在已经创建好的SpringBoot项目中添加依赖
5.2、代码变化:
5.3、lombok原理解释
1、为什么要使用日志
- 能够发现和定位问题
- 能够记录用户登录日志,便与分析用户是正常登录还是恶意破解用户
- 能够记录系统的操作日志,方便数据恢复和定位操作人
- 记录程序的执行时间,方便为以后优化程序提供数据支持
例如SpringBoot项目启动时,输出的控制台日志信息:

2、自定义日志打印
步骤:
- 在程序中得到日志对象
- 使用日志对象的相关语法输出要打印的内容
2.1、在程序中得到日志对象
//1、得到日志对象
private static Logger logger = LoggerFactory.getLogger(ControllerTest.class);

注:Logger对象是属于org.slf4j包下
因为SpringBoot中内置了日志框架slf4j,所以咱们直接在程序中调用slf4j来输出日志
怎么理解这个问题呢?

也就是说,日志的实现是会有很多种方式,而开发者们掌握的技能可能并不统一,就会造成,每个程序员都是用不同的方式去实现日志,当一个程序员离职后,另一个程序员想要修改一些日志输出格式等之类的东西,就会很麻烦,所以日志的门面就在这里起作用了,成功做到了解耦,开发者就只需要负责调用对接slf4j,而不需要关注日志是如何实现的了
2.2、使用日志对象打印日志
package com.example.demo;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** Created with IntelliJ IDEA.* Description:* User:龙宝* Date:2023-03-13* Time:15:40*/
@RestController
@RequestMapping("/test")
public class ControllerTest {//1、得到日志对象private static Logger logger = LoggerFactory.getLogger(ControllerTest.class);@RequestMapping("/hi")public String sayHi() {//写日志logger.trace("日志:trace");logger.debug("日志:debug");logger.info("日志:info");logger.warn("日志:warn");logger.error("日志:error");return "日志打印";}}
将项目启动后,在url输入对应的地址,访问后,回到IDEA,就会看到自己定义的日志了~
为了可以看清楚,咱可以把Spring Boot项目启动时打印的日志删除掉:

访问:
日志:
2.3、日志格式

日志归属,也可能是缩写,如:
前面两个缩写~
有小伙伴可能看到,打印的日志并不全,明明写五个,只打印了3个,为什么?这里就会引出日志的级别啦~
3、日志的级别
3.1、日志级别的分类
- trace:微量,少许,级别最低
- debug:需要调试时候的关键信息打印
- info:普通的打印信息(默认日志的级别)
- warn:警告,不影响使用,但需要注意的问题
- error:错误信息,级别较高的错误日志信息
- fatal:致命的,因为代码异常导致程序退出执行的事件
日志级别的顺序:

越往上接收到的消息越少,如设置了warn就只能收到warn、error、fatal级别的日志了
3.2、日志级别的设置
日志级别配置在配置文件中配置:
logging:level:root: error
4、持久化日志
为什么要持久化日志,因为上述的日志都是输出在控制台上的,然而在生产环境上咱们需要将日志保存下来,以便后续出现问题追溯问题,将日志保存下来的过程就叫做持久化
将日志保存下来,只需要在配置文件中指定日志的存储目录或者是指定日志保存文件名之后,SpringBoot就会将控制台的日志写到相应的目录或文件下了~
配置日志文件的保存路径:
logging:file:path: D:\\CCL\\rizhi
配置文件的文件名:
logging:file:path: D:\\CCL\\rizhi\\spring0313.log
重新启动代码,访问对应网页,然后去查看对应文件夹:

我这的重复是因为我刚才不小心,将页面刷新了好几遍 ~
5、更简单的日志输出——lombok
每次创建一个新的类,需要的打印日志信息时,都需要:
//1、得到日志对象private static Logger logger = LoggerFactory.getLogger(xxxx.class);
稍显繁琐,因此使用lombok来更简单的输出:
- 添加lombok框架支持
- 使用@slf4j注解输出日志
5.1、如何在已经创建好的SpringBoot项目中添加依赖
如果,一开始创建项目时,没有添加lombok依赖,则需要添加lombok依赖,在已经创建好的SpringBoot项目中添加依赖,需要借助插件

然后将页面跳转到pom.xml上,右击:

然后就可以啦~
5.2、代码变化:

5.3、lombok原理解释
我们查看target目录【target为项目最终执行的代码】:

没有对应的slf4j注释了,而变成了最原来的创建日志对象的操作~
ps:如果有同学没有target这个目录,如下操作:

把这个勾上即可~
好啦,本期到这里就结束咯~下期见~
相关文章:
程序员必会技能—— 使用日志
目录 1、为什么要使用日志 2、自定义日志打印 2.1、在程序中得到日志对象 2.2、使用日志对象打印日志 2.3、日志格式 3、日志的级别 3.1、日志级别的分类 3.2、日志级别的设置 4、持久化日志 5、更简单的日志输出——lombok 5.1、如何在已经创建好的SpringBoot项目中添加…...
生成项目的包依赖文件requirements.txt
目录生成项目的包依赖文件requirements.txtrequirements.txt文件怎么来?使用pipreqs第三方库requirements.txt文件使用requirements.txt生成项目的包依赖文件requirements.txt 在安装部署代码时或者使用别人的项目时,会需要安装项目的依赖包,…...
安卓渐变的背景框实现
安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合,这是最推荐的方法,也是最有效的。2.利用canvas裁剪实现,这个方法有个缺陷,就是圆角会出现毛边,也就是锯齿。3.利用layer绘制边框1.背景 万…...
【拳打蓝桥杯】算法前置课——时间复杂度与空间复杂度
文章目录前言为什么需要复杂度分析?大O复杂度表示法时间复杂度分析几种常见时间复杂度实例分析空间复杂度分析内容小结最后说一句🐱🐉作者简介:大家好,我是黑洞晓威,一名大二学生,希望和大家一…...
vite中动态引入图片,打包之后找不到图片地址?
一般来说项目中我们集中存放图片,然后希望在页面中直接引入! 更好的就是直接在模板中调用一个函数 然后传入图片的名字就可以显示出来 事实上确实可以办到,我们用到了一个 new URL import.meta.url这俩个东西 再src目录下 static 下创建一…...
Docker 常用命令大全
目录 一、Docker (一)Docker基础命令 (二)docker镜像命令 (三)docker容器命令 (四)docker运维命令 一、Docker 容器是一种虚拟化技术,容器是镜像实例…...
React项目规范:目录结构、根目录别名、CSS重置、路由、redux、二次封装axios
React项目(一)一、创建项目二、目录结构三、craco配置别名并安装less1.craco安装2.配置别名3.安装less四、CSS样式重置五、配置路由六、配置Redux1.创建大仓库2.创建小仓库(1)方式1:RTK(2)方式2…...
SystemVerilog 教程第一章:简介
SystemVerilog 教程像 Verilog 和 VHDL 之类的硬件描述语言 (HDL) 主要用于描述硬件行为,以便将其转换为由组合门电路和时序元件组成的数字块。为了验证 HDL 中的硬件描述正确无误,就需要具有更多功能特性的面向对象的编程语言 (OOP) 来支持复杂的测试过…...
【Java|基础篇】逻辑控制-顺序结构、分支结构和循环结构
文章目录顺序结构分支结构if单分支语句if else双分支语句if else if else多分支语句switch语句循环语句for循环while循环do while循环continuebreak总结顺序结构 顺序结构是指代码按照从上往下的顺序依次执行 分支结构 选择语句是条件成立时,才会执行的语句.共有三种.分为是if…...
【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)
项目地址:Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步:数据抽取 第二步:探索分析 第三步:数据的预处…...
Kmeans聚类算法-python
import random import pandas as pd import numpy as np import matplotlib.pyplot as plt # 计算欧拉距离 def calcDis(dataSet, centroids, k): clalist[] for data in dataSet: diff np.tile(data, (k, 1)) - centroids #相减 (np.tile(a,(2,1))就是把…...
Linux|奇怪的知识|locate命令---文件管理小工具
前言: Linux的命令是非常多的,有一些冷门的命令,虽然很少用,但可能会有意想不到的功能,例如,本文将要介绍的locate命令。 (平常很少会想到使用此命令,find命令使用的更多,偶然想起…...
Cadence Allegro 导出Function Pin Report报告详解
⏪《上一篇》 🏡《上级目录》 ⏩《下一篇》 目录 1,概述2,Function Pin Reportt作用3,Function Pin Report示例4,Function Pin Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频 1,概述...
蓝桥杯2018年第九题-缩位求和
题目:在电子计算机普及以前,人们经常用一个粗略的方法来验算四则运算是否正确。比如:248 * 15 3720把乘数和被乘数分别逐位求和,如果是多位数再逐位求和,直到是1位数,得2 4 8 14 > 1 4 5;1 5 65…...
基于Yolv5s的口罩检测
1.Yolov5算法原理和网络结构 YOLOv5按照网络深度和网络宽度的大小,可以分为YO-LOv5s、YOLOv5m、YOLOv5l、YOLOv5x。本文使用YOLOv5s,它的网络结构最为小巧,同时图像推理速度最快达0.007s。YO-LOv5的网络结构主要由四部分组成,分别…...
Linux基本命令
Linux基本命令Linux的目录结构Linux命令入门目录切换相关命令(cd/pwd)相对路径、绝对路径和特殊路径符创建目录命令(mkdir)文件操作命令part1 (touch、cat、more)文件操作命令part2 (cp、mv、rm)查找命令 (which、find…...
云原生场景下的安全左移
本博客地址:https://security.blog.csdn.net/article/details/129430859 一、安全左移概述 安全左移需要考虑开发安全、软件供应链安全、镜像仓库、配置核查这四个部分。 首先是开发安全,安全团队需要关注代码漏洞,比如使用代码检查工具进…...
mysql面试经典问题
文章目录 1. 能说下myisam 和 innodb的区别吗?2. 说下mysql的索引有哪些吧,聚簇和非聚簇索引又是什么?3. 那你知道什么是覆盖索引和回表吗?4. 锁的类型有哪些呢5. 你能说下事务的基本特性和隔离级别吗?6. 那ACID靠什么保证的呢?7. 那你说说什么是幻读,什么是MVCC?幻读什…...
微信小程序|基于小程序+C#制作一个考试答题小程序
基于小程序+C#制作一个考试答题小程序打破传统线下考试答题的边界线问题,使考试不用再局限与某个统一的场所,只要有设备,哪里都能考试。 一、小程序...
【1605. 给定行和列的和求可行矩阵】
来源:力扣(LeetCode) 描述: 给你两个非负整数数组 rowSum 和 colSum ,其中 rowSum[i] 是二维矩阵中第 i 行元素的和, colSum[j] 是第 j 列元素的和。换言之你不知道矩阵里的每个元素,但是你知…...
AXI非对齐访问实战指南:从WSTRB信号到DMA数据搬运的避坑细节
AXI非对齐访问实战指南:从WSTRB信号到DMA数据搬运的避坑细节 在FPGA与ASIC设计中,AXI总线作为AMBA协议族的核心成员,其非对齐访问特性常被开发者视为"双刃剑"。当处理摄像头YUV数据、音频采样流或网络封包等非规整数据时࿰…...
LeetCode 3548. 等和矩阵分割2 详细题解(前缀和+二分+连通性分析)
LeetCode 3548. 等和矩阵分割2 详细题解(前缀和二分连通性分析) 🏷️ 标签:前缀和、二分查找、连通性、哈希表、矩阵、周赛难题 📊 难度:中等 | 📝 题目编号:3548 | 🗂️…...
vue-sonner:轻量级Vue通知组件的高效集成方案
vue-sonner:轻量级Vue通知组件的高效集成方案 【免费下载链接】vue-sonner 🔔 An opinionated toast component for Vue. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-sonner 项目概述 vue-sonner是一个为Vue和Nuxt应用设计的轻量级通知组…...
KV260实战:从PYNQ安装到跑通第一个AI例程,手把手带你玩转边缘AI开发板
KV260边缘AI开发实战:从PYNQ部署到图像分类全流程指南 当你第一次拿到KV260开发板时,可能会被它小巧的外表所迷惑——这块巴掌大的开发板实际上搭载了赛灵思的Kria K26 SOM系统模块,内含可编程逻辑和四核ARM Cortex-A53处理器,专为…...
多维尺度变换(MDS)实战指南:从原理到Python实现
1. 多维尺度变换(MDS)是什么? 多维尺度变换(Multidimensional Scaling,简称MDS)是一种经典的降维算法,它的核心思想是通过保持数据点之间的距离关系,将高维数据映射到低维空间。想象…...
AI建站避坑指南:10个高频问题与风险防范全解析
用AI建站虽然快,但过程中隐藏的风险如果没到,轻则内容效果差,重则可能有版权或合规隐患。这份避坑指南,围绕大家最关心的10个核心问题,给出客观的分析和可操作的防范建议,帮你安心用好AI建站工具。\### 核心…...
玩大型游戏用什么主板好:2026年市场格局与技术趋势解析
2026年第一季度,全球游戏级电脑主板市场正经历一场深刻的价值重塑。据行业研究机构数据显示,2026年全球游戏级主板市场规模预计将达到127.5亿美元,年复合增长率保持在8.30%的稳健水平。在这一轮增长周期中,单纯依靠硬件堆砌的时代…...
如何免费获取Microsoft Word APA第7版参考文献格式:完整安装指南
如何免费获取Microsoft Word APA第7版参考文献格式:完整安装指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 还在为学术论文的参考文献…...
别再只跑Demo了!手把手教你用vLLM部署微调后的Qwen2.5-3B-Instruct模型,实现高效批量推理
从微调到生产:Qwen2.5-3B-Instruct模型的高效推理部署实战 当开发者完成LoRA微调后,往往会面临一个现实问题:如何将训练好的模型真正用起来?原生Transformers推理在吞吐量和延迟上的表现,很难满足生产环境的需求。本文…...
一、ACWing笔记整理
一、基础算法1.快速排序--不稳定算法思路:两个指针从最左最右出发,当指向数<(>)x时向中间移动,若>(<)则两指针指向数交换#include <iostream> using namespace std;const int…...
