【Spring Boot】了解Spring Boot 的日志文件

目录

一、日志的作用

二、日志文件的简单使用 

1、Spring Boot中的默认日志

2、自定义日志打印

三、日志级别

1、日志级别分类

 2、日志级别的设置

3、日志持久化

四、基于LomBok的日志输出

1、安装Lombok插件

2、使用Lombok添加日志

3、使用Lombok添加getter和setter方法

 4、LomBok的工作原理


一、日志的作用

日志是我们程序中极其重要的一部分,程序在执行期间报错,我们需要通过日志来排查错误,如果没有日志,我们只能靠猜来找程序中的错误,显然这是非常荒唐的做法。通过日志来排错只是它的一种用途,还可以使用日志来实现下面的用途

  • 记录用户登录日志,方便分析用户是正常登录还是恶意破解用户
  • 记录系统的操作日志,方便数据恢复和定位操作人
  • 记录程序执行时间,放便为以后优化程序提供数据支持。

二、日志文件的简单使用 

1、Spring Boot中的默认日志

运行Spring Boot程序,我们可以看见控制台上就输出了默认日志

 通过这里我们可以知道Spring Boot内置了日志框架,从而完成了日志在控制台的打印。这里默认打印的日志并不是开发者自己定义的日志。那么我们自己怎样打印日志呢?

很多老铁想到了使用System.out.println()来打印,但是很遗憾,不能使用它来打印日志,当然使用这个方法,也可以按照上面的格式,打印出一个日志,但是最大的问题就是这种打印日志的方式无法保存日志并且显示不出来日志的级别。

2、自定义日志打印

开发者自定义日志的实现步骤

  • 得到日志对象
  • 使用日志对象提供的方法输出想要打印的内容

1️⃣得到程序中的日志对象 

在程序中获取日志对象需要使用日志工厂LoggerFactory。

 //1.得到日志对象private static Logger log = LoggerFactory.getLogger(LogController.class);

这里getLogger方法中需要传入当前类,用来说明这个日志属于那个类,有利于我们直观的定位到出现问题的位置。还需要注意的是我们在使用Logger类的时候,会出现很多Logger的提示,我们要选择org.slf4j包下的。

2️⃣使用日志对象打印日志

这里我们将所有日志级别都打印出来

package com.example.demo.controller;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LogController {//1.得到日志对象private static Logger log =LoggerFactory.getLogger(LogController.class);@RequestMapping("/log")public void log(){String msg = "小张学编程";log.trace("trace ->" +msg);log.debug("debug ->"+msg);log.info("info ->" +msg);log.warn("warn ->"+msg);log.error("error ->"+msg);}
}

我们代码中写了5种级别的日志,但是只打印了3种 ,这是由于Spring Boot默认情况下日志的级别为info,比info级别低的日志不会被打印出来。具体是什么情况,下面的内容中会说到。


三、日志级别

1、日志级别分类

日志级别的做用是设置不同级别的日志来查看不同程度的问题信息,方便定位排查问题。比如我们将默认的日志级别改为warn,那么就只会出现warn及更高级别日志信息。

日志的级别可以分为六种

  • trace:微量、少许的意思,几倍最低;
  • debug:需要调试时候的关键信息打印
  • info:普通的打印信息(默认的日志级别);
  • warn:警告,不影响使用,但需要注意的问题;
  • error:错误信息,级别较高错误日志信息;
  • fatal:致命的日志级别,只有系统在崩溃时才会输出的日志信息

 这里有6个日志级别实际上,我们可以使用的日志级别只有前5个,fatal只有系统才能使用。这几个日志级别从上到下逐级递增。

 2、日志级别的设置

1️⃣给当前项目设置默认的日志级别

我们在配置文件中通过logging.level.root=warn来设置.使用这个方式配置的是项目中所有的日志都输出warn级别及之上的日志。

logging.level.root=warn

可以看见控制台上的日志打印就非常少了,就只出现了我们自己写的日志了。 将比warn级别低的日志全都过滤掉。

2️⃣给项目中文件夹单独设置日志级别

设置com.example.demo.controller包下的类,debug以及更高级别的日志打印在控制台上。

logging.level.com.example.demo.controller=debug

 

❗❗❗为什么Spring Boot 可以打印日志并设置日志级别?


❓❓❓因为Spring Boot内置了两个日志框架:SLF4J和LogBack。这里设置两个日志框架可以这样理解这两个框架的关系,比如你装修需要找装修公司,首先你需要和客服交流,然后客服根据你的需求找相应的师傅。这里的SLF4J就是客服,LogBack就是干活的师傅,代码底层的实现我们不关注,我们只需要和SLF4J对接。SLF4J是让开发者使用和调用的框架,LogBack是最底层实现日志相关操作的框架(我们看见的控制台上的日志的日志,是由它完成的)。

3、日志持久化

上述我们说到的日志的分类和设置日志的级别,在控制台看起来都是完全可以打印出来的,但是项目中我们的程序是要将这些日志持久保存的,和之前一样只是打印在控制台上是不行,需要我们保存下来,以便处理问题之后追溯问题。

让日志持久化存在两种设置方式。

1️⃣在配置文件中设置日志的保存路径

logging.file.path=D:/hello/

 将日志保存在了d盘的hello目录中。

 2️⃣设置日志保存的文件名,这样就表示你需要将日志保存下来

logging.file.name=springboot.log

重新启动项目,就可以在项目目录中看见日志文件

 这些日志文件中的日志信息是以追加的方式保存在文件中的,由于是追加的方式添加,所以就会出现日志文件放不下的情况,出现这种情况,他会自动的在我们设置的存放日志文件的目录中在创建一个新的文件,将之后的日志信息存放在里面。


四、基于LomBok的日志输出

lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量.

1、安装Lombok插件

无论什么版本的idea都需要安装Lombok。

先在你的idea中搜索有没有安装Lombok,你安装的有些插件中捆绑了这个插件。如果没有安装,在Marketplace中搜索Lombok,进行安装即可。

在项目中添加lomBok依赖。在pom.xml中单击鼠标右键,找到Generate,点击然后找到Edit Starters点击。

 

2、使用Lombok添加日志

之前我们想要输出日志需要使用到日志工厂,从其中得到得到日志对象。

    private static Logger log = LoggerFactory.getLogger(LogController.class);

现在使用Lombok中的@slf4j注解,就可以代替这句代码, 更简单的输出日志。

3、使用Lombok添加getter和setter方法

我们之前创建一个实体类的时候,创建的属性如果为private的,还需要在代码中写getter和setter方法,这样就显得代码很臃肿,如果只是一点属性,使用getter和setter方法,都还可以,但是如果属性很多,那么代码的可读性就会降低。现在我们使用Lombok之后,即使属性再多,也不会出现代码臃肿的问题。

上述我们使用了三个Lombok注解,当然如果你觉得这些注解加起来麻烦,我们还可以使用组合注解@Data,更加简单。一个注解代替前面三个。

 4、LomBok的工作原理

LomBok是一种Java库,他提供了一些注解来自动生成代码。Lombok是在程序的编译器期通过注解将对应的代码添加到程序中,它并不会影响到程序的性能。他只是在编译期简化了程序员代码的编写,提高了代码的可读性。

 我们通过程序编译的字节码来验证

 

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

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

相关文章

SAM 大模型Colab快速上手【Segment Anything Model】

Google Colab 是一个基于云的 Jupyter 笔记本环境,允许您通过浏览器编写、运行和共享 Python 代码。 它就像 Google 文档,但用于代码。 通过免费版本的 Google Colab,你可以获得带有约 16GPU VRAM 的 Nvidia Tesla T4 GPU,这对于…

解决K8S集群设置污点后,污点不生效,下发应用的问题

问题:在集群中部署了三个daemonset,一开始加了容忍Toleration,后边去掉Toleration后,还是一直往边缘节点上部署应用,非常离谱 解决:删掉Toleration后,需要把annotations一起删掉,因为…

区块链媒体发稿:区块链媒体宣发常见问题解析

据统计,由于区块链应用和虚拟货币的兴起,越来越多媒体对区块链领域开展报导,特别是世界各国媒体宣发全是热火朝天。但是,随着推卸责任媒体宣发的五花八门,让很多人因而上当受骗,乃至伤害一大笔资产。身为投…

打破雇佣思想 云畅科技CIO曾颖博士浅析零雇工模式

作者简介 INTRO 曾 颖 工商管理博士 云畅科技高级合伙人、CIO 产业咨询&企业数字化转型落地专家 2018年,“零雇工”企业组织创新2018全球创新创业教育高峰论坛在西安举行,我当时作为上海沐新众创空间的导师和分会场“企业家如何创建零雇工…

6.pip简介,第三方库的安装

引言 使用过Visual Studio的小伙伴可能对npm不陌生,没错,pip与npm的功能是一样的。 首先要知道,Python这门语言拥有着丰富的标准库以及先辈们开发的各种功能强大的第三方库。而今天我们主要学习的呢就是关于Python中的包管理工具。它是Pytho…

模仿火星科技 基于cesium+ 贴地测量+可编辑

当您进入Cesium的编辑贴地测量世界,下面是一个详细的操作过程,帮助您顺利使用这些功能: 1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。在屏幕的一角,一个友好的提示窗将…

Java基础入门篇——While循环(十二)

目录 一、循环结构语句 二、while循环语句 三、do-while循环语句 四、break使用 一、循环结构语句 在实际生活中经常会将同一件事情重复做很多次。例如,在做眼保健操的第四节轮刮眼眶时,会重复刮眼眶的动作:打乒乓球时,会重复…

车云一体化系统基础理论

车云一体化系统基础理论 介绍目标正文 参考文档 介绍 最近在调研车云链路一体化的整套解决方案,涉及分布式消息队列(RocketMQ)、分布式存储(Doris)、离线数据处理(Spark)、用户行为日志分析&am…

vuejs 设计与实现 - 双端diff算法

我们介绍了简单 Diff 算法的实现原理。简单 Diff 算法利用虚拟节点的 key 属性,尽可能地复用 DOM元素,并通过移动 DOM的方式来完成更新,从而减少不断地创建和销毁 DOM 元素带来的性能开销。但是,简单 Diff 算法仍然存在很多缺陷&a…

告别传统人肉运维,实现360°可观测!奇点云数据存算引擎DataKun R2.0发布

近日,奇点云的数据云全系产品发布新一季更新。本文着重分享数据存算引擎DataKun、数据安全引擎DataBlack、指标工厂SimbaMetric、标签工厂SimbaTag的最新进展。 摘要: 数据存算引擎DataKun R2.0发布,在安全稳定、智能运维、自主可控等层面均…

深入理解Jdk5引入的Java泛型:类型安全与灵活性并存

深入理解Jdk5引入的Java泛型:类型安全与灵活性并存 ​ 在Java的中,有一个强大的工具,它可以让你在编写代码时既保持类型安全,又享受灵活性。**这个工具就是——泛型(Generics)。**本文将引导你深入了解Java…

袋鼠云数栈 DataOps 数据生产力实践,实现数据流程的自动化和规范化

袋鼠云产品团队在帮助企业进行数字化转型实践的过程中,发现很多企业在数据生产链路上都有着相同的问题。包括数据团队聚焦于业务需求短期内的快速交付,内部缺少自顶向下的数据生产管理制度,在数据标准、数据生产流程到研发规范的各个层面均存…

【网络】数据链路层

目录 一、以太网 二、以太网帧格式 三、 MTU 1、MTU概念 2、 MTU对IP协议的影响 3、MTU对UDP协议的影响 4、 MTU对于TCP协议的影响 四、MAC地址 五、 ARP协议 1、ARP协议的作用 2、ARP协议的工作流程 3、ARP数据报的格式 4、中间人 数据链路层解决的,是…

分享windwosServer2012R--ISO镜像下载地址(含激活教程)

windowsServer2012R----急速网盘下载地址:点击下载 提取码:888999 激活下载:点击下载 提取码:888999

【Linux】网络层、数据链路层、DNS、ICMP协议、NAT技术

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录 👉网络层&a…

【香瓜说职场】如何高效地提问(2018.05.06)

一、什么是低效地提问? 香瓜先举3个非常非常常见的低效提问实例: 1、“为什么我的XXX不成功?” 这个问题就像“为什么我会摔倒”,可能原因有“腿残疾”、“路上有坑”、“眼神不好”等无数种原因……“不摔倒”的我是回答不了的、…

Django入门 - 路由Route的基本使用

文章目录 1. 直接访问视图函数,没有使用子路由2. 使用子路由 urls.py 我们一般叫它根路由 1. 直接访问视图函数,没有使用子路由 MyDjangoPro2\views.py 代码 from django.shortcuts import renderfrom django.http import HttpResponse# 视图函数Views …

消息队列 (9)-消费者核心类的实现

目录 前言消费者类设计思路核心API总体代码 前言 我们上一篇博客,写了虚拟主机的实现, 在虚拟主机中需要用到俩个未实现的类,分别是验证绑定关键字和消费者类,接下来我们实现消费者类的核心代码 消费者类设计思路 在这个类中,首先我们要持有virtualHost对象来操作数据, 然后…

postman----传参格式(json格式、表单格式)

本文主要讲解postman使用post请求方法的2中传参方式:json格式、表单格式 首先了解下,postman进行接口测试,必须条件是: ♥请求地址 ♥请求协议 ♥请求方式 ♥请求头 ♥参数 json格式 先看一下接口文档,根据接口文档&…

深度学习环境安装依赖时常见错误解决

1.pydantic 安装pydantic时报以下错误: ImportError: cannot import name Annotated from pydantic.typing (C:\Users\duole\anaconda3\envs\vrh\lib\site-packages\pydantic\typing.py) 这个是版本错误,删除装好的版本,重新指定版本安装就…