Spring Boot的日志文件

news2024/9/20 14:35:27

目录

日志的作用

日志的打印

常见的日志框架

自定义的日志打印

为什么不用sout来打印日志

Spring Boot日志打印

1.得到日志对象

2.使用日志对象提供的方法打印日志

日志级别

日志级别的顺序

日志级别的设置

日志持久化

配置日志文件的保存路径

配置日志文件的文件名

日志文件最大说明

更简单的日志输出-lombok

lombok原理

快速添加Spring Boot依赖


日志的作用

  1. 通过查看日志,来排除和定位问题,这也是日志最主要的通途.
  2. 记录用户的登录日志,方便分析用户是正常登录还是恶意破解用户.
  3. 记录系统的操作日志,方便数据恢复和定位操作人.
  4. 记录程序的执行时间,方便以后优化程序提供数据的支持.

日志的打印

当我们在启动Spring Boot项目的时候,控制台里已经有日志的打印了.

这些都是系统打印的日志.

这就说明Spring Boot是已经内置了日志框架的,如果不内置是无法进行日志的打印的.

那么开发者应该如何自定义打印日志呢?控制台打印的日志并非是持久化的,那么怎么持久化的保存日志呢?


常见的日志框架

Spring Boot内置的日志框架是SLF4J和logback.

日志门面是设计模式的一种,门面模式.日志门面的身份就类似于中间代理.当我们要打印日志的时候,我们的请求是首先到达日志门面,由日志门面里的框架,根据我们的配置和驱动来决定最后使用哪一个日志实现的框架. 

这样做的好处就是当当前的日志实现的框架挂掉了之后,我们可以自然衔接到另一个日志实现框架,无需对代码进行大量的修改.


自定义的日志打印

为什么不用sout来打印日志

不用sout来打印日志的原因:

  • 相比于系统打印的日志来说,sout打印的日志少了很多信息,比如日志的打印时间和打印日志的位置
  • sout没有日志级别的控制
  • sout打印的日志不能持久化保存,并且生产环境是后台启动项目,无法看到控制台打印的信息. 

Spring Boot日志打印

1.得到日志对象

日志对象是私有的,每个类对应到一个日志对象.

日志对象是定义在类里的,而不是方法里,所以日志对象的作用范围是整个类.

2.使用日志对象提供的方法打印日志

log点出来的方法有很多,都是对应到不同日志级别的打印方法.

访问sayHi,查看控制台信息.

可以看到只打印了三条,trace和dubug没有打印.

这是因为默认的日志级别是info,只有info及以上级别的日志才能被打印.


日志级别

日志级别的顺序

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

级别设置的越高,收到的信息越少.如果级别设置了warn,那么就只能收到warn,error和fatal级别的日志了.


日志级别的设置

通过在配置文件中设置logging.level配置项.

此时启动项目,查看控制台:

没有日志的打印,这是因为我们的日志级别设置成了error,没有日志的打印说明没有错误日志.

访问sayHi,查看控制台:

可以看到日志的打印,同时也打印了trace和dubug,这是因为我们设置com.example.demo.controller下的日志级别是trace. 


日志持久化

我们上面日志的输出都是在控制台上,但是在生产环境下我们需要把日志都保存下来,以便出现问题之后通过日志来定位问题,把日志保存下来的过程就叫做持久化.

日志持久化很简单,只需要在配置文件中指定日志的存储目录或者指定日志保存的文件名,Spring Boot就会把控制台的日志写到响应的目录或者文件下了.

配置日志文件的保存路径

访问sayHi

 可以看到控制台打印了日志

同时,在D:\\log下生成了一个spring.log文件,打开查看,发现也有了日志内容.

 再次访问sayHi,日志内容会追加,而不会覆盖.


配置日志文件的文件名

再次启动项目,访问sayHi. 

 可以看到,在我们只设置名字而不设置路径的时候,日志会默认保存在当前项目的路径下.

我们也可以在name里设置路径+名字,这样就日志可以保存在我们设置的路径下了.

访问sayHi

可以看到在我们设置的路径下生成了springboot.log


日志文件最大说明

所以关于日志的持久化我们得出一个结论:日志文件一旦产生,那么日志文件及其内容就会永久的保存,不会出现文件或内容的丢失,无论任何操作都会保持以上这一特性.

那这样会不会出现一个问题:当我们保存日志的文件一直积累日志内容,文件大到我们无法打开 ?

答案是不会的,Spring Boot帮我们做了规定.

这是spring官网关于系统配置项的说明.

官网系统项说明的网址:Common Application Properties 

也就是说一旦日志文件超过了10MB,Spring Boot会在相同的目录下自动帮我们生成一个日志文件,来保存接下里的内容(新文件的名字会有-1,-2的标识),这就起到了日志分割的作用.我们也可以主动去设置文件最大的值.


更简单的日志输出-lombok

这是lombok插件提供给我们的注解,使用这个注解前提是安装了lombok插件并且引入了lombok的依赖.

这样就可以在代码里省去logger对象的创建.


lombok原理

lombok框架的是在编译的时候起作用的,在编译的时候,lombok会根据我们给出的lombok注解来实现相应的作用.

使用lombok和不是用过lombok最终生成的字节码是一样的,所以lombok不会改变运行的效率.

使用lombok只是帮我们省去了手写部分代码的麻烦,它会在编译期间,帮我们将对应的代码写到类当中去.

我们可以在idea中查看,来验证我们所说的.

target目录下就是程序运行时所生成的字节码文件,我们可以直接在idea中查看,idea会自动的将字节码转为Java程序.

我们可以看到,生成的字节码文件里是有创建log对象这一过程的.


快速添加Spring Boot依赖

如果我们在Spring Boot项目创建的时候没有引入依赖,等项目创建好之后,我们依然可以在pom.xml文件中引入对应的依赖,可以通过原始的方式,去maven仓库拷贝,但是这一过程太过麻烦,而且还要考虑版本适配的问题.

因此我们可以使用EditStarters插件来实现快速添加依赖的功能.

步骤:

1.安装完插件之后,重启idea.

2.在pom.xml文件中右键,点击生成,点击EditStarters,就可以进入页面来添加依赖.

 

  

这样依赖就自动添加到pom.xml中了,最后点击reload即可.


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

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

相关文章

学习spark笔记

✨ 学习 Spark 和 Scala 一 ​ 🐦Spark 算子 spark常用算子详解(小部分算子使用效果与描述不同) Spark常用的算子以及Scala函数总结 Spark常用Transformations算子(二) Transformation 算子(懒算子):不会提交spark作业&#…

AWT——事件处理机制

事件处理: 定义: 当某个组件上发生某些操作的时候,会自动地触发一段代码的执行 在GUI事件处理机制中涉及到4个重要的概念需要理解。 事件源:操作发生的场所,通常指某个组件,例如按钮、窗口等 事件&…

Spring Boot Web请求

在上一讲,学习了Spring Boot Web的快速入门以及Web开发的基础知识,包括HTTP协议以及Web服务器Tomcat等内容。基于SpringBoot的方式开发一个web应用,浏览器发起请求 /hello 后 ,给浏览器返回字符串 “Hello World ~”。运行启动类启…

不能接受就滚,某外卖企业在汕尾的蛮横做法,或是它衰退的开始

近期某外卖平台因为大举降低外卖骑手的单价,引发高度关注,直到汕尾的外卖骑手集体抵制,引发与该外卖平台的激烈博弈,而外卖平台也显示了它的强硬手段,此举只会进一步激化矛盾,进而导致该外卖企业的衰落。 据…

Nginx的优化和防盗链

一、隐藏版本号 1、隐藏版本号的操作步骤 可以使用 Fiddler 工具抓取数据包,查看 Nginx版本, 也可以在 CentOS 中使用命令 curl -I http://192.168.229.90 显示响应报文首部信息。 curl -I http://192.168.2.661.1、方法一:修改配置文件方…

上海车展:预售价109.8万元,仰望U8见证国产品牌崛起

如果要评选2023上海车展上比亚迪展台“最亮的星”,估计很多媒体和观众都会毫不迟疑地把票投给仰望U8。 没办法,因为在本届车展上,仰望U8的表现实在是太吸睛了。 作为比亚迪旗下的高端新能源品牌,仰望汽车在上海车展上携两款车型—…

element+vue小技巧和报错解决(持续更新)

目录 1-关于el-table复选框中表头和内容不对齐问题 2-日期选择器传值给后端格式不对 3-获取表格的当前行数据#default"{row}" 1-关于el-table复选框中表头和内容不对齐问题 <el-table:data"tableData"stripestyle"width: 100%"tooltip-ef…

Flink IntervalJoin 笔记

Flink Join 一、Fink IntervalJoin 1、简要说明 Flink 中基于 DataStream 的join&#xff0c;只能实现在同一个窗口的两个数据流进行Join。但是实际中会存在数据乱序或者延时情况&#xff0c;导致两个流的数据进度不一致。无法在同一个窗口内Join。 Flink 基于 KeyedStream…

详论YUM仓库的部署和NFS共享服务

目录 一:YUM仓库服务 1.YUM概述 2.安装源的准备 &#xff08;1&#xff09;软件仓库的提供方式 &#xff08;2&#xff09;RPM软件包的来源 &#xff08;3&#xff09;创建Centos7软件仓库 &#xff08;4&#xff09;在软件仓库加入非官方RPM包 3.访问YUM仓库 4.安装FT…

商品页面翻页功能--购物车拓展

之前我们在mvc练习中曾经写过翻页功能&#xff0c;现在我们给购物车产品显示界面也加一个 1、把productlist中dao的sql语句做出修改&#xff0c;并传递需要用到的参数 再来一个返回product总数的方法 2、 对productlist的servlet拓展相关操作&#xff0c;准备好翻页的功能 3、…

访问图像像素

Opencv访问图像像素 预备知识: 图像矩阵的大小取决于所用的颜色模型(或者说通道数)&#xff0c;灰度图矩阵如下: 多通道图像&#xff0c;如RGB颜色模型的矩阵如下&#xff1a; 注&#xff1a;opencv的通道顺序是BGR&#xff0c;而不是RGB 访问图像中像素方法: import num…

新建虚拟机更改ip(连接xshell)

# 查看网络设备 [rootcentos79 ~]# nmcli device DEVICE TYPE STATE CONNECTION ens32 ethernet 已连接 ens32 ens33 ethernet 已连接 ens33 virbr0 bridge 已连接 virbr0 lo loopback 未托管 -- # 查看…

Unity之OpenXR+XR Interaction Toolkit实现 抓取物体

前言 我们今天来说一下如何使用XR Interaction Toolkit来实现和3D物体的交互之&#xff1a;抓取&#xff0c;简单说就是通过VR手柄拿起来一个物体。 二.准备工作 有了前两篇的配置介绍,我们就不在详细说明这些了&#xff0c;大家自行复习 Unity之OpenXRXR Interaction Toolk…

PyCharm连接远程服务器配置过程

目录 背景 一、建立远程服务器连接 1.创建远程连接 2.进行本地项目与远程项目之间的文夹路径映射 3.设置自动上传项目&#xff08;如有需要&#xff0c;可设置&#xff09; 4.验证是否连接成功&#xff08;调出服务器的文件目录&#xff09; 二、本地配置Python解释器 …

【社区图书馆】-《科技服务与价值链》总结

【为什么研究价值链】 价值链及价值链协同体系是现代产业集群的核心枢纽&#xff0c;是推进城市群及产业集群化、服务化、生态化发展的纽带。因而推进价值链协同&#xff0c;创新发展价值链协同业务科技资源体系&#xff0c;既是科技服务业创新的重要方向&#xff0c;也是重塑生…

NetApp ONTAP: 企业级数据管理软件,为无缝混合云奠定基础

为何选择 NetApp ONTAP 进行企业数据管理 NetApp ONTAP 数据管理软件可帮助您快速应对新的业务挑战&#xff0c;简化日常活动并给您的团队留下深刻印象。无论您在内部环境和云中有着怎样的数据管理需求&#xff0c;ONTAP 都能满足您。 1、支持当今的数据驱动型企业 当今的企…

升级底座、打破壁垒、消灭报销,让业财融合一触即发!

一个平台 一个入口 一站服务 以移动互联网、云计算、大数据、人工智能、5G与物联网、区块链为代表的新一代信息通信技术&#xff08;ICT&#xff09;的集群式、交互式发展&#xff0c;驱动企业进入数智化新阶。商业创新是打造企业竞争力的必然选择&#xff0c;在数字化转型大潮…

p68 内网安全-域横向 PTHPTKPTT 哈希票据传递

数据来源 ​ ​ Kerberos 协议具体工作方法&#xff0c;在域中&#xff0c;简要介绍一下&#xff1a; 客户机将明文密码进行 NTLM 哈希,然后和时间戳一起加密(使用krbtgt 密码 hash 作为密钥)&#xff0c;发送给 kdc&#xff08;域控&#xff09;&#xff0c;kdc 对用户进行检…

C语言从入门到精通第11天(数组的基本操作)

数组的基本操作 数组的概念一维数组二维数组 数组的概念 在程序设计中&#xff0c;为了方便处理数据把具有相同类型的若干变量按有序形式集合在一起&#xff0c;这些按序排列的同类数据元素的集合称为数组。 在C语言中&#xff0c;数组属于构造数据类型&#xff0c;一个数组可…

聊聊如何通过APT+AST来实现AOP功能

前言 如果有使用过spring aop功能的小伙伴&#xff0c;应该都会知道spring aop主要是通过动态代理在运行时&#xff0c;对业务进行切面拦截操作。今天我们就来实现一下如何通过APTAST在编译期时实现AOP功能。不过在此之前先科普一下APT和AST相关内容 APT&#xff08;注解处理…