Spring Boot 中的日志

news2024/11/24 17:56:39

一、日志有什么用?

日志是程序的重要组成部分,想象一下,如果程序报错了,不让你打开控制台看日志,那么你能找到报错的原因吗?
答案是否定的,写程序不是买彩票,不能完全靠猜,因此日志对于我们来说,最主要的用途就是排除和定位问题。
除了 发现和定位问题 之外,我们还可以通过日志实现以下功能:
  • 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。
  • 记录系统的操作日志,方便数据恢复和定位操作人。
  • 记录程序的执行时间,方便为以后优化程序提供数据支持。
以上这些都是日志提供的非常实用的功能。

日志真实使用案例:

关键节点上的关键数据日志记录举例:例如,比如一个教务系统,在注册时候不止要在教务系统添加一条用户记录,同时也会给论坛添加一条一模一样的用户记录,这样做的目的是为了实现一次注
册,多处使用的目的。不需要用户在两边系统注册了,等于在程序中以极低的成本实现的用户数据的同步,但这样设计有一个致命的问题,用户在教务系统注册信息的时候,如果论坛挂了,那么用户的注册行为就会失败?因为用户在注册的时候需要同步注册到论坛系统,但论坛现在挂了,这个时候怎么办呢?
最简单的解决方案,教务系统在注册的时候,不管论坛是否注册成功,都给用户返回成功,那这个时候如果论坛注册失败了怎么办?非常简单,如果注册失败了,记录一下日志,等论坛恢复正常之后,把日志给论坛的管理人员,让他手动将注册失败的用户同步到论坛系统,这样就最低成本的解决了问题。这就是日志的重要作用。

二、日志怎么用?

Spring Boot 项目在启动的时候默认就有日志输出,如下图所示:
以上内容就是 Spring Boot 输出的控制台日志信息。
通过上述日志信息我们能发现以下 3 个问题:
  • Spring Boot 内置了日志框架(不然也输出不了日志)。
  • 默认情况下,输出的日志并非是开发者定义和打印的,那开发者怎么在程序中自定义打印日志呢?
  • 日志默认是打印在控制台上的,而控制台的日志是不能被保存的,那么怎么把日志永久的保存下来呢?
下面我们一起来找寻这些问题的答案

三、自定义日志打印

开发者自定义打印日志的实现步骤:
  • 在程序中得到日志对象。
  • 使用日志对象的相关语法输出要打印的内容。
接下来我们分别来看。

3.1 在程序中得到日志对象

在程序中获取日志对象需要使用日志工厂 LoggerFactory ,如下代码所示:
// 1.得到日志对象
private static Logger logger = LoggerFactory.getLogger(UserController.class);
日志工厂需要将每个类的类型传递进去,这样我们才知道日志的归属类,才能更方便、更直观的定
位到问题类。
注意: Logger 对象是属于 org.slf4j 包下的 ,不要导入错包。

 

因为 Spring Boot 中内置了日志框架 Slf4j ,所以咱们可以直接在程序中调用 slf4j 来输出日志。

常见的日志框架说明(了解)

 

3.2 使用日志对象打印日志

日志对象的打印方法有很多种,我们可以先使用 info() 方法来输出日志,如下代码所示:
// 2.使用日志打印日志
logger.info("--------------要输出日志的内容----------------");
打印日志效果展示:

 

3.3 日志格式说明

 

四、日志级别

4.1 日志级别是用?

日志的级别就是为了筛选符合目标的日志信息的。试想一下这样的场景,假设你是一家 2 万人公司的老板,那么每个员工的日常工作和琐碎的信息都要反馈给你吗?一定不会,因为你根本没有那么多精力。于是就有了组织架构,而组织架构就会分级,有很多的级别设置,如下图所示:

 

有了组织架构之后,就可以逐级别汇报消息了,例如:组员汇报给组长;组长汇报给研发一组;研发一组汇报给 Java 研发,等等依次进行汇报。
而日志分级大概的道理也是一样的,有了日志级别之后就可以过滤自己想看到的信息了,比如设置日志级别为 error ,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者的信息筛选时间。

4.2 日志级别的分类与使用

日志的级别分为:
  • trace:微量,少许的意思,级别最低;
  • info:普通的打印信息;
  • debug:需要调试时候的关键信息打印;
  • warn:警告,不影响使用,但需要注意的问题;
  • error:错误信息,级别较高的错误日志信息;
  • fatal:致命的,因为代码异常导致程序退出执行的事件。

 日志级别的顺序:

越往上接收到的消息就越少。

日志使用

日志级别配置只需要在配置文件中设置 “logging.level” 配置项即可,如下所示:
logging:
level:
root: error
配置跟路径的日志级别。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@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:\home\ruoyi
配置日志文件的文件名:
# 设置日志文件的文件名
logging:
file:
name: D:\home\ruoyi\spring-1204.log

六、更简单的日志输出—lombok

每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加一遍,也很麻烦,这里讲一种更好用的日志输出方式,使用 lombok 来更简单的输出。
1. 添加 lombok 框架支持。
2. 使用 @slf4j 注解输出日志。

6.1 添加 lombok 依赖

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>

6.2 输出日志

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {
@RequestMapping("/log")
public void loggerTest() {
log.error("------------------- error -----------------");
    }
}

6.3 lombok 原理解释

lombok 能够打印日志的密码就在 target 目录里面, target 为项目最终执行的代码,查看 target 目录如下:

 

Java 程序的运行原理:

 

Lombok 的作用如下图所示:

 

6.4 lombok 更多注解说明

基本注解

 

组合注解

日志注解 

总结

日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题, Spring Boot 内容了日志框架,默认情况下使用的是 info 日志级别将日志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解和 log 对象快速的打印自定义日志,日志包含 6 个级别:
  • trace:微量,少许的意思,级别最低;info:普通的打印信息;
  • debug:需要调试时候的关键信息打印;
  • warn:警告,不影响使用,但需要注意的问题;
  • error:错误信息,级别较高的错误日志信息;
  • fatal:致命的,因为代码异常导致程序退出执行的事件。
日志级别依次提升,而日志界别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称或保存目录来将日志永久地保存下来。

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

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

相关文章

腾讯校园招聘技术类编程题汇总

题解&#xff1a;并查集&#xff08;模板&#xff09; #include <iostream> #include<map> using namespace std; int father[2000006]; int rank1[1000005]; void init(int n){for(int i1;i<1e5;i){father[i]i;rank1[i]1;} } int find(int x){if(father[x]x){…

数据可视化 - 动态柱状图

基础柱状图 通过Bar构建基础柱状图 from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar构建基础柱状图 bar Bar() # 添加X轴 bar.add_xaxis(["中国", "美国", "英国"]) # 添加Y轴 # 设置数值标签在右侧 b…

上门家政系统开发|上门预约家政小程序定制系统

随着人们生活水平的提高&#xff0c;对于家政服务的需求也越来越高。上门家政小程序的开发为家政服务商家提供了一个全新的经营和服务渠道。本文将介绍上门家政小程序适合的商家以及其优势。   1. 家政公司   家政公司是最直接受益于上门家政小程序开发的商家。通过开发家政…

AMEYA360代理线:ROHM开发出EcoGaN™减少服务器和AC适配器等的损耗和体积!

全球知名半导体制造商ROHM&#xff08;总部位于日本京都市&#xff09;面向数据服务器等工业设备和AC适配器等消费电子设备的一次侧电源*1&#xff0c;开发出集650V GaN HEMT*2和栅极驱动用驱动器等于一体的Power Stage IC“BM3G0xxMUV-LB”&#xff08;BM3G015MUV-LB、BM3G007…

【JavaEE初阶】HTTP协议

文章目录 1. HTTP概述和fiddler的使用1.1 HTTP是什么1.2 抓包工具fiddler的使用1.2.1 注意事项1.2.2 fiddler的使用 2. HTTP协议格式2.1 HTTP请求格式2.1.1 基本格式2.1.2 认识URL2.1.3 方法 2.2 请求报头关键字段2.3 HTTP响应格式2.3.1 基本格式2.3.2状态码 1. HTTP概述和fidd…

nginxWebUI runCmd命令执行漏洞复现

系统描述 NginxWebUI 是一款图形化管理 nginx 配置的工具&#xff0c;可以使用网页来快速配置 nginx单机与集群的各项功能&#xff0c;包括 http协议转发&#xff0c;tcp协议转发&#xff0c;反向代理&#xff0c;负载均衡&#xff0c;静态 html服务器&#xff0c;ssl证书自动申…

【Python机器学习】实验01 Numpy以及可视化回顾

文章目录 一、Numpy的基础知识实验1 生成由随机数组成的三通道图片&#xff0c;分别显示每个维度图片&#xff0c;并将三个通道的像素四周进行填充&#xff0c;分别从上下左右各填充若干数据。 二、Numpy的线性代数运算实验2 请准备一张图片&#xff0c;按照上面的过程进行矩阵…

磁场强度单位和磁感应强度单位转换

磁学量常用单位换算 、磁场强度单位和磁感应强度单位转换。 磁场单位 Oe&#xff08;奥斯特&#xff09;,A/m,T&#xff08;特斯拉&#xff09;三种. 1T1000mT 1mT10Gs 1Gs79.6A/m 1T(特斯拉)10000Gs(高斯)1Wb/M2 1Gs(高斯)1Oe(奥斯特)

C#实现系统进程的调用,查看进程调用的模块

1.需要使用命名空间&#xff1a;System.Diagnostics; 2.Process.GetProcess()可以获取所有进程 3.获取进程调用的模块 ProcessModuleCollection modules currentProcess.Modules; foreach循环一下FileName就可以查看调用了什么dll文件了 4.有关进程的信息&#xff08;Process…

最新基于Citespace、vosviewer、R语言文献计量学可视化分析技术及全流程文献可视化SCI论文高效写作方法

目录 专题一 文献计量学方法与应用简介 专题二 主题确定、检索与数据采集 专题三 VOSviewer可视化绘图精讲 专题四 Citespace可视化绘图精讲 专题五 R语言文献计量学绘图分析 专题六 论文写作 专题七 论文投稿 文献计量学是指用数学和统计学的方法&#xff0c;定量地分析…

线性神经网络——softmax 回归随笔【深度学习】【PyTorch】【d2l】

文章目录 3.2、softmax 回归3.2.1、softmax运算3.2.2、交叉熵损失函数3.2.3、PyTorch 从零实现 softmax 回归3.2.4、简单实现 softmax 回归 3.2、softmax 回归 3.2.1、softmax运算 softmax 函数是一种常用的激活函数&#xff0c;用于将实数向量转换为概率分布向量。它在多类别…

基于STM32F10x的独立按键测试

本人基于野火指南者开发板&#xff0c;使用FreeRTOS,创建按键任务。 在按键任务里面每隔20毫秒扫描一下按键。包括独立按键&#xff0c;矩阵按键(由于本人没有矩阵按键&#xff0c;故没有测试)。 按键40毫秒以上为短按、1秒以上则为长按、3秒以上则为一直按。且长按10秒以上则…

网络安全(黑客)自学基础到高阶路线

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

Docker + MYSQL 启动nacos

Docker启动nacos默认用的是内存数据库&#xff0c;重启docker容器以后&#xff0c;nacos配置会丢失&#xff0c;非常不方便。所以需要修改为使用Mysql作为nacos的存储。 1.数据库 创建mysql数据库&#xff0c;过程省略&#xff0c;将nacos 的mysql脚本在数据库中进行导入。 m…

北航投资已投企业四象科技成功发射三颗卫星

1箭4星&#xff01;2023年7月23日10时50分&#xff0c;我国在太原卫星发射中心使用长征二号丁运载火箭&#xff0c;成功将四象科技“矿大南湖号”SAR遥感卫星、“虹口复兴号”光学遥感卫星、“中电农创号”热红外遥感卫星以及银河航天灵犀03星共4颗卫星发射升空&#xff0c;卫星…

当机器人变硬核:探索深度学习中的时间序列预测

收藏自&#xff1a;Wed, 15 Sep 2021 10:32:56 UTC 摘要&#xff1a;时间序列预测是机器学习和深度学习领域的一个重要应用&#xff0c;它可以用于预测未来趋势、分析数据模式和做出决策。本文将介绍一些基本概念和常用方法&#xff0c;并结合具体的案例&#xff0c;展示如何使…

7D透明屏的市场应用广泛,在智能家居中有哪些应用表现?

7D透明屏是一种新型的显示技术&#xff0c;它能够实现透明度高达70%以上的显示效果。这种屏幕可以应用于各种领域&#xff0c;如商业广告、展览展示、智能家居等&#xff0c;具有广阔的市场前景。 7D透明屏的工作原理是利用光学投影技术&#xff0c;将图像通过透明屏幕投射出来…

VMware 创建Centos7虚拟机后nat模式无法联网

1. 网卡改为on&#xff0c;dhcp模式&#xff0c;重启网卡&#xff0c;如果还是无法联网 2.修改 /etc/resolv.conf&#xff0c;增加DNS 223.5.5.5,保存后即可ping 通百度&#xff0c;联网。在此记录一下

SolVES模型安装教程

前文是关于SolVES模型扫盲&#xff0c;熟悉SolVES模型的伙伴可直接跳到下面的安装教程。 目前生态系统服务评估主要集中于经济价值&#xff0c;相关的评估方法也较多&#xff0c;如价值当量法、InVEST模型法、市场价格法等&#xff0c;而随着生态系统服务的社会价值得到越多越…

firefox笔记-Centos7离线安装firefox

目前&#xff08;2023-03-22 16:41:35&#xff09;Centos7自带的firefox已经很新了是2020年的。主要原因是有个web项目&#xff0c;用2020年的firefox打不开。 发到互联网上是2023-07-24。 报错是js有问题&#xff0c;估计是搞前端的只做了chrome适应&#xff0c;没做firefox…