【SpringBoot】日志文件

embedded/2025/1/2 3:45:29/

大家好,我是,今天我给大家带来的是 SpringBoot 日志文件的讲解。日志在我们日常编程中尤为重要。如果没有日志,当我们程序出现错误时,我们很难查找到错误从而进行修改。但有了日志后,我们就能通过日志发现错误并精确错误位置及时补救。


目录

1. 什么是日志

2. 日志的用法

2.1 日志的级别

2.2?使用日志

2.3 自定义日志级别

3. 日志的持久化

3.1 将日志存入磁盘

3.2 配置日志文件名

4. Lombok的使用

4.1 idea下载Lombok

4.2 使用方法

4.3 Lombok运行原理


1. 什么是日志

在我们学习语法阶段时,当满足某一个条件时,我们通常会使用 soutSystem.out.println 来输出一句话来作为日志。如执行了某某方法或满足某某条件。

System.out.println("执行了某某方法");

而在 SpringBoot 中,我们有了更为高级日志文件。当我们执行 SpringBoot 项目时,控制台输出的就是一些默认的日志。

记录了某个程序的执行时间、执行的日志级别(是否正常)以及线程名等等。如下图所示。

因此,当你的程序出现错误的时候,你能通过类似上述的日志来精确的查找错误并进行修改。此外出了发现错误和定位错误之外,当你的网站崩溃时正好有人在你的网站上注册账号,此时也返回一个注册成功信息给这个用户,后面你通过该日志也能手动的补录他所注册的账号。可见 SpringBoot 日志是比较重要的。

下面我来更加详细的讲解 SpringBoot 日志的用法以及如何配置。


2. 日志的用法

2.1 日志的级别

日志的级别:

  1. TRACE:这是最低级别的日志记录,用于输出最详细的调试信息。通常用于开发调试阶段,但在生产环境中应关闭以避免输出过多无用信息。
  2. DEBUG:用于输出程序中的调试信息,通常在开发过程中使用。生产环境中也应关闭以减少日志量。
  3. INFO:用于输出程序正常运行时的一些关键信息,如程序启动、运行日志等。在生产环境中通常开启此级别的日志记录。
  4. WARN:用于输出警告信息,提示程序可能会出现一些异常或错误。主要用于记录一些非致命性异常信息,以便及时发现并处理问题。
  5. ERROR:用于输出程序运行时的错误信息,通常表示程序出现了不可预料的错误。用于记录一些致命性异常信息,以便及时发现并处理这些问题。
  6. FATAL:表示程序出现了严重错误,通常会导致应用程序崩溃或无法继续运行。这是比ERROR更严重的级别。

2.2使用日志

使用日志我们通过 **Logger logger = LoggerFactory.getLogger(类名);**来进行使用,如下列代码。Logger 应用 org.slf4j 包下的。

@RestController
public class LogController {// 得到日志对象private static Logger logger = LoggerFactory.getLogger(TestController.class);@RequestMapping("/logger")public void logger() {String msg = "日志";// 按照从低到高的顺序打印日志级别logger.trace("trace 的" + msg);logger.debug("debug 的" + msg);logger.info("info 的" + msg);logger.warn("warn 的" + msg);logger.error("error 的" + msg);}
}

当在浏览器中输入 localhost:8080/logger 时,浏览器没有任何显但控制台输出了相应的日志。我们仔细观察只输出了 info、warn、error,前面的 tracedebug 没有输出,如下图所示。

SpringBoot 中,系统只会输出等于或者大于当前日志的级别。默认的日志级别是 info,这意味着只有 info、warn、error 级别的日志会被打印,而 tracedebug 级别的日志则不会被显示。


2.3 自定义日志级别

假设我们将每一种日志都进行统计的话,如默认的 info 日志,这样我们每天将会得到无数的记录,因此我们可以通过 **logging.level.**来设置级别。**level.**后面的就是你想设置的范围,如想将整个项目默认级别进行设置则用 logging.level.root

如在 application.properties 配置文件中设置当前的默认日志级别为 warn 。使用 logging.level.root=warn来更改设置当前日志的默认级别。

再次执行 localhost:8080/logger 得到的自然是 warnerror

此外,我们也可以特定为某一个文件设置,如将 com.example.demodemo 文件设置为 debug

为什么SpringBoot能打印日志和设置日志级别?

解释:SpringBoot 内置了两个框架 SLF4JLogBack ,其中 LogBackSpringBoot 底层实现日志的基本框架,而 SLF4J 则是我们程序猿能够直接使用的。就想我们外出吃饭,LogBack 是我们的服务员,SLF4J 比作老板。当服务员服务不到位时,我们直接叫老板换一个服务员。


3. 日志的持久化

上述的我们所打印的日志,只能在控制台黑框框中输出,当我们关闭编译器后这些日志就全部消失了。因此,我们可以将这些日志保存到磁盘(本地电脑等存储介质)中,这样就能保证日志的持久化。


3.1 将日志存入磁盘

在配置文件中使用 logging.file.path=“存放路径” 即可,如将上文中的日志存放到 D 盘的 test 文件夹底下,我们只需要输入以下代码即可。

logging.file.path=D:\test



3.2 配置日志文件名

此外,我们也可以给存入磁盘的日志文件起名,只需要在路径后面加上要起的名即可。如下代码:

logging.file.path=D:\test\MyLog


4. Lombok的使用

4.1 idea下载Lombok

更加简单使用日志,即使用 Lombok 插件,我们可以在 File->Settings->Plugins 中搜索 Lombok 下载即可。

然后在 pom.xml 文件中,添加 Lombok 的框架的框架支持。你可以在 SpringBoot 项目创建时候添加,也可以通过 EditStarters 来进行添加。

此时,pom.xml 文件中应多入以下代码:

		<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

4.2 使用方法

直接在方法上方加入**@Slf4j** 注解如下代码所示:

@RestController
@Slf4j
public class LogController {@RequestMapping("/logger")public void logger() {String msg = "日志";// 按照从低到高的顺序打印日志级别log. trace("trace 的" + msg);log.debug("debug 的" + msg);log.info("info 的" + msg);log.warn("warn 的" + msg);log.error("error 的" + msg);}
}

我们可以看到 @Slf4j 来源于 lombok


4.3 Lombok运行原理

Lombok的运行原理主要基于编译器插件和注解处理。Lombok通过在编译期间对源代码进行操作,自动生成所需的代码片段,从而减少开发人员需要编写的冗余代码。

Lombok的工作流程

  1. 初始化插入注解处理器:Lombok作为一个注解处理器,在编译过程中初始化并准备处理注解。
  2. 解析与填充符号表过程:编译器对源代码进行词法分析和语法分析,构建抽象语法树(AST),并填充符号表。
  3. 插入式注解处理器的注解处理过程:Lombok处理器根据注解信息,对AST进行操作,添加或修改节点。
  4. 分析与字节码生成过程:对语法进行静态检查,进行数据流和控制流分析,还原简化代码的“语法糖”,最终生成字节码。

Lombok的实现机制

Lombok通过注解处理来实现其功能。它使用Java的注解处理器API,在编译时对源代码的AST进行操作。Lombok提供的注解如@Data@Builder@Setter@Getter等,都是在编译过程中被处理,生成相应的代码片段。例如,@Data注解会在类上自动生成getter、setter、equals、hashCode和toString方法。

当我们添加 @Slfj 后,实际上在 target 文件夹底下,会自动生成一行类代码 LoggerFactory 代码。此外,大家可以尝试 @Setter@Getter@Data等注解。


本篇博客到这里就结束了,感谢各位的观看。


http://www.ppmy.cn/embedded/150181.html

相关文章

代码随想录算法训练营第六十天 | 图 | A星算法

Day 60 总结 自己实现中遇到哪些困难今日收获&#xff0c;记录一下自己的学习时间 13:00 - 14:00 BFS 题目&#xff1a;127. 骑士的攻击 给定两个坐标&#xff0c;搜索最短路径 使用 BFS&#xff0c;广度搜索&#xff0c;按层搜索找到最短路径 public class Main {public…

Lua元方法

这一章主要记录介绍 元表 和 元方法 和使用&#xff0c;如果对 元表 不熟悉的同学可以闪现Lua元表。 元方法 是元表中的某些字段&#xff0c;定义了表在特定操作下的行为。例如&#xff0c;当表进行加法运算时&#xff0c;Lua会检查元表中的__add字段&#xff0c;并使用它定义的…

【乐企文件生成工程】根据特定要素动态选择需要生成的发票板式文件实现

乐企版式文件生成工程,涉及到多个票种,不乏特殊票种的生成,如果每个特殊票种都单独写逻辑,那整个代码写起来体量就不得了,如何实现代码逻辑的同时也更优雅的实现代码扩展性呢,您接着往下看。 使用设计模式 工厂模式 1、定义接口InvoiceFileService public interface Inv…

termux-boot安卓开机自动启动应用

termux安装 github 蓝奏云 v119.1 termux-boot安装 github 蓝奏云 v0.8.1 安装 给权限运行加锁后台 am启动应用命令 am start -n 包名/启动项获取包名和启动入口&#xff08;图中app为爱玩机工具箱&#xff09; 例 简黑时钟蓝奏云 包名com.hm.jhclock 桌面启动项com.hm.jh…

【JavaEE进阶】@RequestMapping注解

目录 &#x1f4d5;前言 &#x1f334;项目准备 &#x1f332;建立连接 &#x1f6a9;RequestMapping注解 &#x1f6a9;RequestMapping 注解介绍 &#x1f384;RequestMapping是GET还是POST请求&#xff1f; &#x1f6a9;通过Fiddler查看 &#x1f6a9;Postman查看 …

【深度学习数学知识】-贝叶斯公式

条件概率公式&#xff08;定义&#xff09; P ( A ∣ B ) P ( A , B ) P ( B ) P(A|B)\frac{P(A,B)}{P(B)} P(A∣B)P(B)P(A,B)​ 条件概率公式是定义&#xff0c;无法进行公式推导 条件概率 P ( A ∣ B ) P(A|B) P(A∣B)指在事件 B B B发生的条件下&#xff0c;事件 A A A发生…

解决PDF.js部署到IIS服务器上后报错mjs,.ftl 404 (Not Found)

一、报错问题描述&#xff1a;部署到IIS服务器上后,浏览器控制台报错报错mjs,.ftl 404 (Not Found)&#xff0c;pdf也浏览不了 二、解决方法&#xff1a;在IIS服务器添加MIME类型 将下面类型添加即可 .mjs application/javascript .ftl application/octet-stream保存后&…

王佩丰24节Excel学习笔记——第二十讲:图表基础

【以 Excel2010 系列学习&#xff0c;用 Office LTSC 专业增强版 2021 实践】 【本章技巧】 课件图片有问题&#xff0c;不能随隐藏熟悉各个图表小部件的功能&#xff0c;需要修改都是选中右键进行更改。 一、认识图表中的元素 图表标题&#xff1a;主坐标&#xff08;横坐标&…