6.SpringBoot 日志文件

文章目录

  • 1.日志概述
  • 2.日志作用
  • 3.使用和观察日志
    • 3.1如何观察日志
    • 3.2使用日志
    • 3.3日志级别
    • 3.4日志持久化
    • 3.5日志分割
  • 4.日志框架
    • 4.1门面模式(外观模式)
    • 4.2 SLF4J框架介绍
    • 4.3 日志格式的说明
      • 4.3.1日志名称
  • 5.日志颜色设置
  • 6.总结

大家好,我是晓星航。今天为大家带来的是 SpringBoot 日志文件 相关的讲解!😀

1.日志概述

⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?

答案是否定的,写程序不是买彩票,不能完全靠猜,因此⽇志对于我们来说,最主要的⽤途就是排除和定位问题。

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

  • 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
  • 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
  • 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持。

以上这些都是⽇志提供的⾮常实⽤的功能。

日志真实使用案例:

关键节点上的关键数据⽇志记录举例:例如,⽐如咱们的教务系统,在注册时候不⽌要在教务系统添加 ⼀条⽤户记录,同时也会给⽐特论坛添加⼀条⼀模⼀样的⽤户记录,这样做的⽬的是为了实现⼀次注 册,多处使⽤的⽬的。不需要⽤户在两边系统注册了,等于在程序中以极低的成本实现的⽤户数据的同 步,但这样设计有⼀个致命的问题,⽤户在教务系统注册信息的时候,如果论坛挂了,那么⽤户的注册 ⾏为就会失败?因为⽤户在注册的时候需要同步注册到论坛系统,但论坛现在挂了,这个时候怎么办 呢?

最简单的解决⽅案,教务系统在注册的时候,不管论坛是否注册成功,都给⽤户返回成功,那这个时候 如果论坛注册失败了怎么办?⾮常简单,如果注册失败了,记录⼀下⽇志,等论坛恢复正常之后,把⽇ 志给论坛的管理⼈员,让他⼿动将注册失败的⽤户同步到论坛系统,这样就最低成本的解决了问题。这 就是⽇志的重要作⽤。

2.日志作用

1.定位和发现问题

2.系统监控 - 在6.18或11.11时,程序员们会通过系统监控来检测系统是不是有问题和bug

3.数据采集 - 例如你在抖音里搜了一个电脑,你去淘宝上看宝贝时,这时漫天都是电脑

4.日志审计

随着互联网的发展,众多企业的关键业务越来越多的运行于网络之上.网络安全越来越受到大家的关注,系统安全也成为了项目中的一个重要环节,安全审计也是系统中非常重要的部分,国家的政策法规、行业标准等都明确对日志审计提出了要求,通过系统日志分析,可以判断一些非法攻击,非法调用,以及系统处理过程中的安全隐患.

3.使用和观察日志

3.1如何观察日志

image-20240319140216311

3.2使用日志

注意这里引入slg4j包,不要导错包了

image-20240319140715158

1.定义日志对象

image-20240319140936810

2.打印日志

image-20240319140952108

3.观察通过Logger Api打印的日志区别

image-20240319141044295

3.3日志级别

  • FATAL: 致命信息,表示需要立即被处理的系统级错误

  • ERROR: 错误信息,级别较高的错误日志信息,但仍然不影响系统的继续运行,

  • WARN: 警告信息,不影响使用,但需要注意的问题

  • INFO: 普通信息, 用于记录应用程序正常运行时的一些信息,例如系统启动完成、请求处理完成等

  • DEBUG: 调试信息,需要调试时候的关键信息打印.

  • TRACE: 追踪信息,比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使用DEBUG级别替代)

image-20240319145736525

Spring 默认的日志级别是info

3.4日志持久化

数据保存在数据库中,是一种持久化的方式

日志保存在文件中,也是一种持久化的方式

image-20240319154322973

image-20240319154746394

image-20240319154847614

如果没有加路径,默认是放在当前项目下(idea启动方式)

image-20240319155004302

image-20240319155039842

SpringBoot的特点:约定大于配置

image-20240319160022148

image-20240319160035270

如果二者同时存在,path就失效了。name的优先级要高于path。

image-20240319160203341

这里因为name和path同时存在,但是name优先级更高,导致只有name中的login/ioc.log文件被创建。

3.5日志分割

image-20240319160440690

application.yml:

image-20240319160738747

分割完成后,文件夹显示:

image-20240319160802021

运行三次之后:

image-20240319160906608 image-20240319160929382

image-20240319160502240

3.6日志的简单写法(使用@Slf4j)

选择的注解来源于lombok包

image-20240319162200118

image-20240319162018488

可以看到在我们使用了 @Slf4j 来注释代码后,我们就不需要自己初始化一个Logger对象,而是系统为我们提供一个log对象可以直接引用

4.日志框架

4.1门面模式(外观模式)

SLF4J是门面模式的典型应用(但不仅仅使用了门面模式)

门面模式定义

门面模式(Facade Pattern)又称为外观模式,提供了一个统一的接口,用来访问子
系统中的一群接口.其主要特征是定义了一个高层接口,让子系统更容易使用.

image-20240319141722572

门面模式主要包含2种角色:

外观角色(Facade):也称门面角色,系统对外的统一接口

子系统角色(SubSystem):可以同时有一个或多个 SubSystem.每个 SubSytem 都
不是一个单独的类,而是一个类的集合.SubSystem 并不知道 Facade 的存在,对
于 SubSystem 而言, Facade 只是另一个客户端而已(即 Facade 对 SubSystem 透
明)

例如我们平时回家小米自动开关灯系统:

接口、类设计:

image-20240319143110628

image-20240319143335698

当我们没用门面模式时,我们要手动一个一个打开房间的灯。

image-20240319143403318

但是我们加入了一个总开关后

image-20240319143444777 image-20240319143349388

此时我们只需要控制总开关就可以实现所有灯的开关功能

image-20240319143403318

一键开关所有灯:

image-20240319143739492

image-20240319143714058

image-20240319143802411

门面模式的优点

  • 减少了系统的相互依赖,实现了客户端与子系统的耦合关系,这使得子系统的变化会影响到调用它的客户端;

  • 提高了灵活性,简化了客户端对子系统的使用难度,客户端无需关心子系统的具体实现方式,而只需要和门面对象交互即可,

  • 提高了安全性,可以灵活设定访问权限,不在门面对象中开通方法,就无法访问

4.2 SLF4J框架介绍

SLF4]就是其他日志框架的门面.SLF4]可以理解为是提供日志服务的统一API接口,并不涉及到具体的日志逻辑实现.

不引入日志门面

常见的日志框架有log4],logback等.如果一个项目已经使用了log4j,而你依赖的另一个类库,假如是Apache Active MQ,它依赖于另外一个日志框架logback,那么你就需要把logback也加载进去,

image-20240319144237414

存在问题:

  1. 不同日志框架的API接口和配置文件不同,如果多个日志框架共存,那么不得不
    维护多套配置文件(这个配置文件是指用户自定义的配置文件).

  2. 如果要更换日志框架,应用程序将不得不修改代码,并且修改过程中可能会存
    在一些代码冲突.

  3. 如果引入的第三方框架,使用了多套,那就不得不维护多套配置.

引入日志门面

引入门面日志框架之后,应用程序和日志框架(框架的具体实现)之间有了统一的API接口(门面日志框架实现),此时应用程序只需要维护一套日志文件配置,且当底层实现框架改变时,也不需要更改应用程序代码,

image-20240319144935061

SLF4] 就是这个日志门面

总的来说,SLF4]使你的代码独立于任意一个特定的日志API,这是一个对于开发API的开发者很好的思想.

4.3 日志格式的说明

4.3.1日志名称

image-20240319145343434

日志对象的名称,通常情况下,是当前类

image-20240319145419923

改为当前类后

image-20240319145447484

打印日志结果:

image-20240319145503934

image-20240319155633875

缩写对应目录如下:

image-20240319155722025

5.日志颜色设置

1.启动类设置

image-20240319152926187

2.添加 VM options

image-20240319153030779

image-20240319153131399

添加:

-Dspring.output.ansi.enabled=ALWAYS

image-20240319153438292

看结果图可以发现,我们日志信息已经成功改变颜色

6.总结

日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题,Spring Boot内容了日志框架,默认情况下使用的是 info 日志级别将日志输出到控制台的,我们可以通过 lombok 提供的@lf4j 注解和 log对象快速的打印自定义日志.

日志包含6个级别,日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称或保存目录来将日志持久化.

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 开源SDK 工业相机库 调用海康相机 大恒相机

C# MG.CamCtrl 工业相机库 介绍一、使用案例二、使用介绍1、工厂模式创建实例2、枚举设备,初始化3、启动相机4、取图5、注销相机 三、接口1、相机操作2、启动方式3、取图4、设置/获取参数 介绍 c# 相机库,含海康、大恒品牌2D相机的常用功能。 底层采用回…

去除图像周围的0像素,调整大小

在做分割任务时,经常需要处理图像,如果图像周围有一圈0像素,需要去除掉,重新调整大小 数组的处理 如果图像的最外一圈为0,我们将图像最外圈的图像0去除掉。 import numpy as npdef remove_outer_zeros(arr):# 获取数…

电脑缺失d3dcompiler_43.dll如何修复?多种修复dll问题的有效方法分享

当用户尝试在个人计算机上运行特定的软件游戏时,系统弹出了一条错误提示信息,明确指出“d3dcompiler_43.dll”文件缺失。这个动态链接库文件(dll)是Direct3D编译器的重要组成部分,对于许多基于Windows操作系统的应用程序,尤其是那…

数据库mysql提权四种烧姿势--UDF反弹启动项MOF

免责声明:本问仅做技术交流与学习,请知法守法,不要乱搞等等 目录 前提条件 如何获取最高权限的密码? 一.UDF提权 利用条件: 信息收集 1-看有无plugin目录 2-开启外链 3-开启外连后,MSF启动~ 4-navicat--利用导出的.dll执行命令 利用原理: 执行命令: 二.反弹提权 …

B2024 输出浮点数 洛谷题单

首选需要进行了解的就是%a.bf所代表的含义就行了,直接莽了,没啥解释的笑脸🙄 在 Python 中,%a.bf 中的参数 a 和 b 是用来格式化浮点数的输出的,具体含义如下: a 表示总输出宽度,包括小数点、…

Pytorch入门实战: 06-VGG-16算法-Pytorch实现人脸识别

第P6周:VGG-16算法-Pytorch实现人脸识别 🍨 本文为🔗365天深度学习训练营 中的学习记录博客 🍖 原作者:K同学啊 🏡 我的环境: 语言环境:Python3.8 编译器:Jupyter La…

​​​​​​​iOS配置隐私清单文件App Privacy Configuration

推送到TestFlight后邮件收到警告信息如下,主要关于新的隐私政策需要补充: Hello, We noticed one or more issues with a recent submission for TestFlight review for the following app: AABBCC Version 10.10.10 Build 10 Although submission for …

堆的概念、堆的向下调整算法、堆的向上调整算法、堆的基本功能实现

目录 堆的介绍 堆的概念 堆的性质 堆的结构 堆的向下调整算法 基本思想(以建小堆为例) 代码 堆的向上调整算法 基本思想(以建小堆为例) 代码 堆功能的实现 堆的初始化 HeapInit 销毁堆 HeapDestroy 打印堆 HeapPrint …

Linux配置腾讯云yum源(保姆级教学)

1. 备份原有的 yum 源配置文件 例如: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2. 下载腾讯云的 yum 源配置文件 例如: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/…

28.组件事件配合v-model使用

组件事件配合v-model使用 如果是用户输入&#xff0c;我们希望在获取数据的同时发送数据配合v-model来使用 <template><div><h3>ComponentA</h3><ComponentB some-event"getHandle" /><p>ComponentA接受的数据&#xff1a;{{ m…

【Linux文件系统开发】认知篇

【Linux文件系统开发】认知篇 文章目录 【Linux文件系统开发】认知篇一、文件系统的概念二、文件系统的种类&#xff08;文件管理系统的方法&#xff09;三、分区四、文件系统目录结构五、虚拟文件系统&#xff08;Virtual File System&#xff09;1.概念2.原因3.作用4.总结 一…

排序 “叁” 之交换排序

目录 1. 基本思想 2.冒泡排序 2.1 基本思想 2.2 代码示例 2.3 冒泡排序的特性总结 3.快速排序 3.1 基本思想 &#x1f335;hoare版本 &#x1f335;挖坑法 ​编辑 &#x1f335;前后指针版本 ​编辑 3.2 快速排序优化 &#x1f33b;三数取中法选key 3.4 快速排序…

HAL STM32 SSI/SPI方式读取MT6701磁编码器获取角度例程

HAL STM32 SSI/SPI方式读取MT6701磁编码器获取角度例程 &#x1f4cd;相关篇《HAL STM32 I2C方式读取MT6701磁编码器获取角度例程》&#x1f4cc;当前最新MT6701数据手册&#xff1a;https://www.magntek.com.cn/upload/MT6701_Rev.1.8.pdf&#x1f4dc;SSI协议读角度&#xff…

flutter 实现表单的封装包含下拉框和输入框

一、表单封装组件实现效果 //表单组件 Widget buildFormWidget(List<InputModel> formList,{required GlobalKey<FormState> formKey}) {return Form(key: formKey,child: Column(children: formList.map((item) {return Column(crossAxisAlignment: CrossAxisAlig…

4月21日Linux运维用户相关的添加,分组,修改权限等shell脚本开发第一天

4月21日运维用户相关的添加&#xff0c;分组&#xff0c;修改权限等shell脚本开发第一天 第一天主要实现前2个功能 ​ 主要卡在了&#xff1a; 正确的写法如下&#xff0c;注意[]中的空格&#xff0c;要求很严格&#xff01;&#xff01;&#xff01; #!/bin/bash # 先查看已…

LIUNX系统编程:文件系统

目录 1.创建文件的本质 1.1目录本身也是一个文件&#xff0c;也有他自己的inode 1.2LINUX创建文件&#xff0c;一定是在目录中创建文件。 2.重谈文件的增删查改 2.1为什目录没有写权限&#xff0c;就不能新建文件。 2.2.文件的查找 3.路径 3.1挂载 3.2如何理解挂载 1.创…

【QT学习】8.qt事件处理机制,事件过滤器,自定义事件

1.qt事件处理机制 事件处理&#xff1a; 当用户移动鼠标的时候 &#xff0c;创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去&#xff0c;事件管理器 从队列中 取出事件&#xff0c;然后 调用其对应的事件处理函数。 多态机制&#xff1a; &#x…

2023年图灵奖颁发给艾维·维格森(Avi Wigderson),浅谈其计算复杂性理论方面做出的重要贡献

Avi Wigderson是一位以色列计算机科学家&#xff0c;他在计算复杂性理论方面做出了重要的贡献&#xff0c;并对现代计算产生了深远的影响。 Wigderson的主要贡献之一是在证明计算复杂性理论中的基本问题的困难性方面。他证明了许多经典问题的困难性&#xff0c;如图论中的图同构…

Day08React——第八天

useEffect 概念&#xff1a;useEffect 是一个 React Hook 函数&#xff0c;用于在React组件中创建不是由事件引起而是由渲染本身引起的操作&#xff0c;比如发送AJAx请求&#xff0c;更改daom等等 需求&#xff1a;在组件渲染完毕后&#xff0c;立刻从服务器获取频道列表数据…

每天五分钟机器学习:神经网络模型参数的选择

本文重点 在深度学习和人工智能的浪潮中,神经网络作为其中的核心力量,发挥着举足轻重的作用。然而,神经网络的性能并非一蹴而就,而是需要经过精心的参数选择和调优。 神经网络由大量的神经元组成,每个神经元之间通过权重进行连接。这些权重,以及神经元的偏置、激活函数…