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

news2024/12/25 13:32:16

目录

一、日志的作用

二、日志文件的简单使用 

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.coloradmin.cn/o/853455.html

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

相关文章

第48节:cesium 面交集计算(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><vc-navigation

13-把矩阵看作是对系统的描述

探索矩阵乘法&#xff1a;更深刻的理解与应用视角 &#x1f9e9;&#x1f50d; 引言 &#x1f4d6; 在我们进一步探讨矩阵乘法之前&#xff0c;让我们从不同的角度来理解什么是矩阵&#xff0c;以及如何将矩阵视为一个系统。我们之前已经介绍了矩阵的基本概念和运算&#xff…

那些没人教你的Jmeter 循环断言,百度不到的,收藏一下吧

前言 对于使用jmeter工具完成接口测试的测试工程师而言。在工作中&#xff0c;或者在面试中&#xff0c;都会遇到一个问题。 CSV文档做了一大笔测试数据后&#xff0c;怎么去校验这个结果呢&#xff1f; 现在大部分测试工程师可能都是通过人工的方法去查看结果&#xff0c;十几…

【3D卡片切换】基于jquery实现3D堆叠卡片切换效果(附完整源码)

文章目录 写在前面涉及知识点实现效果1、搭建页面1.1 创建ul li节点1.2 丰富元素Html代码所示CSS代码所示 2、JS实现堆叠切换3、源码分享3.1 百度网盘3.2 123云盘3.3 邮箱留言 总结 写在前面 其实3D卡片堆叠切换效果&#xff0c;从我入前端坑以来就一直喜欢的一种轮播效果&…

护网行动 | AD360 在网络安全中的重要作用

随着数字化时代的来临&#xff0c;网络已经成为了人们生活和工作中不可或缺的一部分。然而&#xff0c;随之而来的是网络安全问题日益突出。为了应对这些安全威胁&#xff0c;护网行动应运而生&#xff0c;其中AD360在保障网络安全方面扮演着至关重要的角色。 AD360是一个集成的…

封装上传组件(axios,进度条onUploadProgress,取消请求)

目录 定时模拟进度条 方法 A.axios B.xhr 取消请求​​​​​​​cancelToken A.axios.canceltoken B.source对象创建canceltoken 完整代码 A.自定义上传组件 B.二次封装组件 情况 增加cancelToken不生效&#xff0c;刷新页面 进度条太快->设置浏览器网速 定时…

发布属于自己的 npm 包

1 创建文件夹&#xff0c;并创建 index.js 在文件中声明函数&#xff0c;使用module.exports 导出 2 npm 初始化工具包&#xff0c;package.json 填写包的信息&#xff08;包的名字是唯一的&#xff09; npm init 可在这里写包的名字&#xff0c;或者一路按回车&#xff0c;后…

JedisDataException DENIED Redis is running in protected mode...异常的解决办法

一. 异常现象 壹哥最近在带学生做项目的过程中&#xff0c;有学生在使用Redis的时候&#xff0c;产生了如下这样的异常信息&#xff1a; com.yyg.demo.Demo01Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is runni…

企业邮箱安全对比:哪家公司的产品更可靠?

邮箱仍然是企业沟通的关键组成部分&#xff0c;但往往容易受到安全威胁。为了保护敏感信息&#xff0c;企业需要采取措施使企业邮箱更加安全。这可以通过投资先进的安全解决方案&#xff0c;创建限制或控制访问的策略&#xff0c;并定期对员工进行最佳实践培训来实现。 1、投资…

Java实战:高效提取PDF文件指定坐标的文本内容

前言 临时接到一个紧急需要处理的事项。业务侧一个同事有几千个PDF文件需要整理&#xff1a;需要从文件中的指定位置获取对应的编号和地址。 要的急&#xff0c;工作量大。所以就问到技术部有没有好的解决方案。 问技术的话就只能写个demo跑下了。 解决办法 1. 研究下PDF文档…

B站又添黑马UP主,首发创下1800万播放

众所周知&#xff0c;ACG类是B站最受欢迎的内容&#xff0c;毕竟B站由二次元内容为起点发展至今&#xff0c;吸引了众多年轻一代的用户群体。 而B站又是一个“来自用户”的平台&#xff0c;由用户转变成UP主自发投稿作品&#xff0c;构建出现在这个存在着大大小小几十个分区的…

固定资产管理工作总结

固定资产管理是现代企业管理工作的重点。在过去的一段时间里&#xff0c;企业专注于固定资产管理&#xff0c;以达到节约企业资源的效果。 企业要坚持以标准化管理为载体&#xff0c;制定完善的固定资产管理制度&#xff0c;全面规范固定资产进出口、汇总、储存、维护、损坏等…

利用 3D 地理空间数据实现Cesium的沉浸式环境

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景 为了将大量异构 3D 地理空间数据处理和分散到各行各业的地理空间应用程序和运行时引擎&#xff0c;Cesium 创建了 3D Tiles&#xff0c;这是一种用于高效流式传输和渲染大量异构数据集的开放标准。3D Tile…

《Python入门到精通》函数详解

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 函数 1、函数的调用2、函数的参数2.1、变量的就近原则2.2、传递参数2.3、形参和实…

恶意扩展可滥用 VS Code 漏洞窃取认证令牌

微软的 Visual Studio Code (VS Code) 代码编辑器存在一个漏洞&#xff0c;允许恶意扩展程序检索 Windows、Linux 和 macOS 中存储的身份验证令牌。 这些令牌用于集成各种第三方服务和 API&#xff0c;如 Git、GitHub 和其他编码平台&#xff0c;因此窃取这些令牌可能会对数据…

试用MetaGPT

简介 最近朋友和B站都给我推 MetaGPT&#xff0c;正好有空就下载亲测了一下。MetaGPT 是目前&#xff08;230809&#xff09;github热榜第一名&#xff0c;今天就加了3000多个星。 MetaGPT是一个多智能体框架&#xff0c;能够生成不同的角色&#xff1a;工程师、产品经理、架…

【sonar】安装sonarQube免费社区版9.9【Linux】【docker】

文章目录 ⛺sonarQube 镜像容器⛺Linux 安装镜像&#x1f341;出现 Permission denied的异常&#x1f341;安装sonarQube 中文包&#x1f341;重启服务 ⛺代码上传到sonarQube扫描&#x1f341;java语言配置&#x1f341;配置 JS TS Php Go Python⛏️出现异常sonar-scanner.ba…

lc345. 反转字符串中的元音字母

元音字母按照从外到内成对的方式反转&#xff0c;不考虑出现的元音字母个数为奇数的情况 双指针&#xff1a;指针1由左向右遍历&#xff0c;指针2由右向左遍历&#xff0c;某个指针指向元音字母时停止&#xff0c;直到它另一个指针也指向元音字母&#xff0c;此时两个指针指向的…

YonGPT发布背后,“实用主义”成为大模型落地新风向

近年来伴随着数字经济的高歌猛进&#xff0c;国内企业服务赛道迅速站上行业风口。以ChatGPT为代表的大模型的到来&#xff0c;更为整个企服赛道添了一把火。而7月27日用友对外发布的首个企业服务大模型YonGPT&#xff0c;则正式宣告了企业服务大模型全新时代的到来。 目前参与…

C# 2048小游戏核心算法

文章目录 01.程序结构划分02.去零03.合并04.上移05.下移/左移/右移&#xff0c;只是取数据的方向不同06.提高可读性 01.程序结构划分 02.去零 有序向量“唯一化”的思路。 /// <summary>/// 去零/// </summary>/// <param name"row">对于一行或一…