【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,一经查实,立即删除!

相关文章

Java关键字:final解析

目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常&#xff0…

C++STL简介

1.STL简介 1.1.STL的概念 STL(standard template libaray即:“标准模板库”)是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 1.2.STL的版本 原始版本:Alexander Stepanov、Meng …

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

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

centos手动离线安装php,nginx

1、CentOS 7上安装并配置Nginx https://www.cnblogs.com/xujiecnblogs/p/16843984.html /usr/local/nginx/sbin/nginx #启动 /usr/local/nginx/sbin/nginx -s stop #关闭 /usr/local/nginx/sbin/nginx -s reload #重启 增加h…

解决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…

华为OD真题--字符串加密

2023华为OD统一考试(AB卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新) "给你一串未加密的字符串str,通过对字符串的每一个字母进行改变来实现加密&#xf…

maven配置settings文件,包含配置阿里云镜像,配置maven私服,配置私服密码

配置阿里云镜像 <!-- 多个相同 mirrorOf 的 mirror配置&#xff0c;会根据他们声明的顺序 决定优先级 --><!--阿里云仓库地址来源 see https://developer.aliyun.com/mvn/guide--><mirror><id>aliyunMaven01</id><name>aliyun maven</n…

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

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

【MFC】07.MFC第三大机制:消息映射-笔记

本专栏上两篇文章分别介绍了【MFC】05.MFC第一大机制&#xff1a;程序启动机制和【MFC】06.MFC第二大机制&#xff1a;窗口创建机制&#xff0c;这篇文章来为大家介绍MFC的第三大机制&#xff1a;消息映射 typfd要实现消息映射&#xff0c;必须满足的三个条件&#xff1a; 类必…

未来,运营的重要性大于产品?

微博上看到某产品大V的一个观点&#xff0c;说在未来&#xff0c;产品运营的重要性会大过产品经理&#xff0c;还挺认同的&#xff0c;谈谈我的想法。 这个观点的核心依据是&#xff0c;目前没有新的产品形态&#xff0c;各种产品解决方案都是标准化的&#xff0c;产品由开疆辟…

Java 面试题2023

Java core JVM 1、JVM内存模型 2、JVM运行时内存分配 3、如何确定当前对象是个垃圾 4、GCrooot 包括哪些? 5、JVM对象头包含哪些部分 6、GC算法有哪些 7、JVM中类的加载机制 8、分代收集算法 9、JDK1.8 和 1.7做了哪些优化 10、内存泄漏和内存溢出有什么区别 11、J…

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

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

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

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

ZZULIOJ 1191: 数星星(结构体专题),Java

ZZULIOJ 1191: 数星星&#xff08;结构体专题&#xff09;&#xff0c;Java 题目描述 一天&#xff0c;小明坐在院子里数星星&#xff0c;Gardon就出了个难题给她&#xff1a;Gardon在天空画出了一个矩形区域&#xff0c;让他输入矩形区域里有多少颗星星&#xff0c;仁慈的上…