【SpringBoot】日志文件

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


目录

[1. 什么是日志](#1. 什么是日志)

[2. 日志的用法](#2. 日志的用法)

[2.1 日志的级别](#2.1 日志的级别)

2.2?使用日志

[2.3 自定义日志级别](#2.3 自定义日志级别)

[3. 日志的持久化](#3. 日志的持久化)

[3.1 将日志存入磁盘](#3.1 将日志存入磁盘)

[3.2 配置日志文件名](#3.2 配置日志文件名)

[4. Lombok的使用](#4. Lombok的使用)

[4.1 idea下载Lombok](#4.1 idea下载Lombok)

[4.2 使用方法](#4.2 使用方法)

[4.3 Lombok运行原理](#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等注解。


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

相关推荐
浮游本尊12 小时前
Java学习第22天 - 云原生与容器化
java
渣哥14 小时前
原来 Java 里线程安全集合有这么多种
java
间彧14 小时前
Spring Boot集成Spring Security完整指南
java
间彧15 小时前
Spring Secutiy基本原理及工作流程
java
Java水解16 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆18 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学18 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole18 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊19 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端