【SpringBoot】日志文件

发布于:2024-12-19 ⋅ 阅读:(10) ⋅ 点赞:(0)

大家好,我是一只爱打拳的程序猿,今天我给大家带来的是 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. 什么是日志

在我们学习语法阶段时,当满足某一个条件时,我们通常会使用 sout System.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,前面的 trace debug 没有输出,如下图所示。

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 得到的自然是 warn error

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

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

解释:SpringBoot 内置了两个框架 SLF4J LogBack ,其中 LogBack SpringBoot 底层实现日志的基本框架,而 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等注解。


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