[短的文章] Spring Boot 日志创建使用、日志级别、@Slf4j、日志持久化——Spring Boot 系列

news2024/11/16 1:51:44

在这里插入图片描述

前言:

想必日志大家伙在项目开发调试过程中常会使用,这篇文章我们来一起探讨一下 Spring Boot 项目中日志的定义与使用,主要针对以下几个方面重点叙述

  • 日志级别

  • 日志框架进行日志定义

  • 日志持久化






1 日志简述


1.1 为什么使用日志

日志大家在开发过程中想必并不陌生,是什么的问题我就不过多赘述。但日志除去能够让我们快速定位和解决问题以外,在实际场景中还有诸多用处

  • 除去定位问题外,日志的业务功能如下
    • 记录用户登陆日志,避免恶意攻击

    • 记录系统操作日志,进行问题回溯

    • 记录程序执行时间,以便进行代码优化




1.2 日志级别

1)引入

  • 我们在实际场景中,日志除去记录重要的问题信息以外,还会记录众多操作、调试等细节信息,显然这两者日志的优先级必然是不一样的,我们自然更希望保留重要部分。如果我们有 过滤一些繁琐的细节信息、只将重要信息保留的需求,我们就可以对日志级别进行调整



2)具体级别

日志包含了以下 6 种隔离级别,从低到高进行排序(部分资料以下级别是从高到低排序)

  • trace:级别最低的日志

  • debug: 记录调试信息

  • info: 默认的隔离级别

  • warn:相关警告,一般不使用

  • error:错误信息

  • fatal:导致程序退出的信息,无需我们手动定义



3)如何设置

如果不进行设置,日志隔离级别默认是 info

  • 在配置文件中,使用如下进行设置

这里使用 yml 格式,root 表示将项目日志级别都设置为相同值

image-20221008161646212

我们也可以给具体的 目录单独设置日志级别,直接在 level 下书写目录的路径和级别即可,一般我们只定义到 包级别 即可,

image-20221123233036190





2 自定义日志


2.1 日志框架

1)引入

  • 如何自定义日志,我们最容易联想到使用最熟悉的 “System.out.println()”,这也是我们在调试代码中相对常用的手段。但是使用这种方法太过 “无脑”, 我们并不能获取到日志时间、隔离级别和定位具体类等最基本但重要的信息。为此,有众多现成完善的日志框架我们来使用即可


2)日志框架

  • 这里我们使用的是 slf4j 作为日志框架,这也是当下最主流的框架之一
  • slf4j 也使用了 “门面模式”,slf4j 就是是日志门面,更底层的实现上使用的就是 logback
    • 常见的日志门面还有 commons-logging,常见的日志实现还有 logg4j 1/2 和 JUL



2.2 slf4j 自定义日志

  • 获取 log 对象
  • 调用对象具体方法

1)获取 log 对象

  • 使用 loggingFactory 工厂类的 getLogger() 方法,并传入当前 类对象,获取 log 对象


2)调用 log 对象的具体方法

  • log 对象包含了众多方法,我们主要使用的就是 traceO()、debug()、info()、warn() 和 error() 这五种方法
  • 虽然这些方法都可以使用,但是显示的时候只会保留 比设定日志级别高的日志

注意导包使用 slf4j 下的

image-20221008161910414

image-20221008162155916

上面设置的日志级别是 warn,所以只打印 warn 级别及以上的

image-20221008162258839


tip:

我们似乎发现,日志的级别明明有六种,为什么只有五种定义日志的方法,fatal 级别的日志定义方法去哪里了?

  • 其实只有项目出现致命错误、强制退出的时候,才会触发 fatal 级别的日志,而这种情境下的日志无需我们去考虑打印,所以也就没有提供 fatal 级别的日志定义方法



2.3 lombook 定义日志

1)具体使用

  • 使用 lombook 调用方法和上述相同,只是可以使用 @Slf4j 注释 直接获取到 log 对象,更加简洁,使用时直接使用 log 名称调用相关方法即可

image-20221008162552215

image-20221008162610783

2)实现原理

  • lombook 在将 .java 文件转换为 .class 文件时,会将 @Slf4j 注解对应的代码实现放入到字节码文件中

我们虽然使用了注释,在 .class 字节码中依然是 log 对象,可以在 target 目录下查看

image-20221008162831324





3 日志持久化


3.1 为社么要日志持久化

  • 我们不难发现,当前的日志都是打印在控制台中的,我们重启程序的时候原本所有的日志信息都不复存在了,但是这定不是我们想看到的,我们期望能够将日志保存下来,以供后续的使用,这就得依靠日志的持久化



3.2 具体实现

1)设置路径

  • 在配置文件中,输入 logging.file.path 进行设置

注意对于 yml 格式来说,同一个根目录的数据要放在一起

image-20221008163524435

image-20221124114128720



2)设置文件名

  • 在配置文件中,输入 logging.file.name 进行设置,这里一般传入文件的绝对路径

上述默认文件名为 spring.log,我们可以传入绝对路径进行更改


tip:

上面两种方法实现日志持久化时,将日志写入到日志文件到操作并不会覆盖原有的数据,而是进行数据追加




总结:
本篇文章主要讨论了六大日志级别,如何使用 slf4j 创建 log 对象定义日志,lombook 使用 @Slf4j 注解更高效创建 log 对象,
以及最后如何在配置文件进行设置,实现日志持久化





至此,文章就全部结束了,觉得不错的铁子,欢迎 点赞、评论、收藏 三连哈

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

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

相关文章

机器学习-逻辑回归

机器学习-基础知识 机器学习-线性回归 机器学习-逻辑回归 机器学习-聚类算法 机器学习-决策树算法 机器学习-集成算法 机器学习-SVM算法 文章目录逻辑回归1. 线性逻辑回归1.1. 理论基础1.2. 逻辑回归模拟步骤1.2.1. 数据集1.2.2. 模拟逻辑回归类模块1.2.3. 测试模块1.2.4. 数据…

PN532开发指南(uart)

开发环境 STM32F103C8T6 STM32f103c8t6最小系统板(typec接口) STM32CUBEMX PN532模块 一、NFC简介 NFC(Near Field Communication)近场通信,是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内。其传输速度有106Kb…

懒人福利:只需一行代码,导入所有的 Python 库

前言 今天给大家介绍一个懒人 Python 库—— Pyforest 。 使用一行代码,就能导入所有的 Python 库(本地已经安装的)。 GitHub 地址 https://github.com/8080labs/pyforest (文末送读者福利) / 01 / 介绍 Python 因为有着成千上万个功能…

paper 阅读: An introduction to ROC analysis

发布于2005年,附论文链接如下: https://ccrma.stanford.edu/workshops/mir2009/references/ROCintro.pdf 之前一直都是从各种博客上了解ROC的,最近才看到这一篇paper。 写在前面 用 True(T)和 False(F&…

BGP进阶:BGP 基础实验配置

实验拓扑 实验需求 R1、R2、R3属于AS123,R4属于AS 400;AS123内的R1、R2、R3运行OSPF,通告各自直连接口,注意OSPF域的工作范围;R3-R4之间建立eBGP邻居关系,R2暂时不运行BGP,R1-R3之间建立iBGP邻…

MCE | D-萤光素 Protocol 在手,生物发光检测无忧!

■ Q: D-萤光素的作用原理 D-萤光素 (D-Luciferin) 是萤火虫萤光素酶 (Firefly Luciferase) 的化学发光底物。在ATP 和萤光素酶存在下,萤光素能够被氧化发光 (图 1)。当萤光素过量时,发光亮度与萤光素酶浓度呈正相关。通过萤光素/萤光素酶生物发光体系&…

小程序容器技术加快推动国产操作系统“上车”

计算机是当前乃至未来的基础工具,而负责管理计算机硬件与软件资源、提供必须的人机交互机制的操作系统无疑是整个计算机的核心系统软件。 可以说,操作系统是当前一个国家提升综合实力过程中必须要攻克、掌握的核心技术之一。 国产操作系统多为以Linux为…

猫狗肠道菌群—“主子们”的健康新领域

随着生活水平提升,我国养宠人士逐年增多。数据显示,我国城镇养宠人士达到6844万多人,且仍在不断增长。 其中养猫人群数占比59.5%,养狗人群数占比51.7%,养水族类占比8.3%,养爬行类宠物的占比为5.8%&#xff…

Linux 文件操作(三) —— 获取并打印某个文件的属性(文件类型、执行权限、文件大小)

目录 1、获取文件属性 stat / lstat / fstat (1) 参数 path (2) 参数 buf (3) 返回值 2、获取并打印某个文件的属性 (1) 获取文件类型 (2) 获取文件权限 (3) 获取文件大小 (4) 获取上一次的访问时间 (5) 最终代码 1、获取文件属性 stat / lstat / fstat stat / lsta…

[附源码]java毕业设计疫情防控期间网上教学管理

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

数据分析可视化之模型介绍

一 前言 “数据分析可视化”这条术语实现了成熟的科学可视化领域与较年轻的信息可视化领域的统一。 数据分析可视化:是指将大型数据集中的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。 数据可视化已经提出了许多方法&…

【软件工程导论】1.软件过程模型

软件过程模型什么是软件过程模型包括瀑布模型特点演化模型特点增量模型特点原型模型类型使用策略废弃策略追加策略螺旋模型特点什么是软件过程模型 又叫作软件开发模型、软件生存周期模型 包括 瀑布模型 每一阶段都会生成文档 特点 缺乏灵活性在交互使用时才能发现问题&…

用HTML+CSS仿网易云音乐网站(6个页面)_实训素材

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 音乐网页设计 | 仿网易云音乐 | 各大音乐官网网页 | 明星音乐演唱会主题 | 爵士乐音乐 | 民族音乐 | 等网站的设计与制作 | HTML期末大学生网页设计作…

ubuntu 安装 k8s 记录 2 初始化

ubuntu 安装 k8s 记录 2 初始化初ubuntu 安装 k8s 记录初始化初始化前置条件查询本机 ip需要docker初始化报错禁止 Swap 分区禁用 CRI重启 containerd重置节点初始化初始化报错设置驱动向 docker 看齐如果遇到出错要重新初始化,先执行下面两个步骤关闭 swap 并重新设…

业务增长遇到瓶颈?这些用大数据驱动业务增长的方法你一定要看看

目录 前言 一、海量数据处理方案 1.1 大数据存储 1.1.1 传统数据存储 1.1.2 云大数据仓库 1.2 数据BI快速展示 1.2.1大数据BI产业链结构分析 1.2.2 华为一站式大数据BI方案 前言 随着大数据与云原生的快速发展融汇交互,各技术领域又将来临新一波迅雷之势的挑…

数据增强

在训练数据拆分上评估数据增强,以增加高质量训练样本的数量。 Intuition 通常希望通过数据扩充来增加训练数据的规模和多样性。它涉及使用现有样本生成合成但真实的示例。 拆分数据集。想首先拆分数据集,因为如果允许将生成的样本放置在不同的数据拆分中…

HTML+CSS+JS环境保护网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计

🎀 精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

FEDformer 代码分析(2)

首先总结一下FEDformer里面这些这些东西, mean的尺寸是:(1,96,7) seasonal_init的尺寸是:(1,144,7) trend_init的尺寸是:(1,144,7) zeros的尺寸是&#x…

[附源码]java毕业设计疫苗接种管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

四、图片特效

目录一、灰度处理二、颜色反转三、马赛克四、毛玻璃五、图片融合六、边缘检测与浮雕效果1 - 边缘检测2 - 浮雕效果七、颜色映射八、油画效果一、灰度处理 使用openCV的imread方法实现 import cv2img0 cv2.imread(image0.jpg, 0) img1 cv2.imread(image0.jpg, 1) print(img0…