【Spring Boot】之日志文件

本文介绍了日志在编程中的重要性,如何在SpringBoot项目中自定义日志,包括使用LoggerFactory获取日志对象和Lombok简化输出。还详细阐述了日志级别设置及其分类,以及如何实现日志的持久化存储。
摘要由CSDN通过智能技术生成

🏀🏀🏀来都来了,不妨点个关注!
🎧🎧🎧博客主页:欢迎各位大佬!
在这里插入图片描述

1.日志有什么用?

⽇志是程序的重要组成部分,想象⼀下,如果程序报错了,不让你打开控制台看⽇志,那么你能找到报错的原因吗?
答案是否定的,⽇志对于我们来说,最主要的⽤途就是排除和定位问题。
日志是程序的重要组成部分,除了上述说的排除和定位问题以外,还具有以下几种功能:

  • 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。
  • 记录系统的操作⽇志,⽅便数据恢复和定位操作⼈。
  • 记录程序的执⾏时间,⽅便为以后优化程序提供数据⽀持

2.日志的使用

Spring Boot 项⽬在启动的时候默认就有⽇志输出,如下图所示
在这里插入图片描述
那么就有疑问了,为什么Spring Boot项目可以打印日志,并且设置日志的级别呢?这是因为Spring Boot内置了两个日志框架:SLF4J+ LogBack,其中SLF4J是让开发者使用和调用的框架,而LogBack则是最底层实现日志相关操作的框架。
同时这里也有两个问题:

1. 日志是默认打印的,输出的日志并不是开发者定义和打印的,那么开发者怎么在程序中自定义打印日志呢?
2. ⽇志默认是打印在控制台上的,⽽控制台的⽇志是不能被保存的,那么怎么把⽇志永久的保存下来呢?

接下来我们就对上面两个问题来进行讲解。

3.自定义打印日志

自定义打印日志的步骤可分为以下两步:

  • 在程序中得到⽇志对象。
  • 使⽤⽇志对象的相关语法输出要打印的内容。

3.1 得到日志对象

//1.获取日志对象
    private static Logger log = LoggerFactory.getLogger(LogController.class);

需要注意的是,Logger对象导入的包是下图所示:
在这里插入图片描述
此外,获取日志对象我们是通过日志工厂LoggerFactory下的方法得到的。

3.2 使用日志对象提供的API打印日志

//打印日志的方法
@RequestMapping("/log")
    public void doLog() {
        String msg = "今天星期天,不是摆烂的一天";
        log.trace("trace -> " + msg);
        log.debug("debug -> " + msg);
        log.info("info -> " + msg);
        log.warn("warn -> " + msg);
        log.error("error -> " + msg);
    }

打印结果:
在这里插入图片描述
通过上述打印结果我们发现,我们明明用了5种方法分别打印了5种不同级别的日志,但打印结果却只有3种,这其实和日志的默认级别和级别的设置有关,在接下来的内容中我们会对日志的级别进行详细的介绍。

4. 日志的级别

4.1 日志级别的作用

日志可以将我们帮我们筛选出重要的信息,比如我们如果将日志的默认级别设置为error,此时我们就只能看到报错信息了,通过设置不同的日志级别,能方便我们定位问题,高效的排查问题。从而节省开发者对日志信息的筛选时间。

4.2 日志级别的分类

⽇志的级别分为:

  • trace:微量,少许的意思,级别最低;
  • debug:调试的日志级别;
  • info:普通的日志级别(默认⽇志级别);
  • warn:警告日志级别,不影响使⽤,但需要注意的问题;
  • error:错误信息,级别较⾼的错误⽇志信息;
  • fatal:致命的日志级别,只有在系统崩溃的时候才输出的日志级别,级别最高。

其中我们能自定义的日志级别只有前五个,fatal是在程序崩溃的时候出现的。
在这里插入图片描述

需要注意的是:越往上接受到的信息越少,比如我们如果设置了日志级别为warn,则只能收到warn、error和fatal级别的信息了。比如我们上面的例子,由于系统默认的日志级别为info,所以在我们打印日志信息的时候就没有看到trace和debug级别的日志信息。

4.3 日志级别的设置

日志级别的设置,只需要在配置文件中设置“logging.level”配置项即可,下面以.yml配置文件举例:

# 给当前项目设置日志级别
logging:
  level:
    root: warn
#给单独文件夹设置日志级别
    com:
      example:
        demo:
          Controller: debug

通过上述配置Controller的日志级别为debug后,我们之前打印的日志信息就发生了变化,如下图所示:
在这里插入图片描述

5. 日志的持久化

现在,我们已经知道如何自定义打印日志了,还有一个日志持久化的问题,日志的持久化就是如何将日志保存到磁盘中,上述我们的日志都是直接打印在控制台,每一次重新启动项目,之前的日志信息就没了,想要将日志持久化的保存下来就需要在配置文件中设置日志文件的保存路径或者设置日志文件的保存文件名。
配置文件的保存路径:

logging:
  file:
     path: D:\\logging\\spring-boot1

在这里插入图片描述
配置文件的保存文件名:

logging:
  file:
     name: D:\\logging\\spring-boot1\\spring2.log

在这里插入图片描述

6. 使用Lombok更简单的输出日志

在上面的自定义打印日志中我们每次都使⽤ LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,也很麻烦,这⾥讲⼀种更好⽤的⽇志输出⽅式,使⽤ lombok 来更简单的输出。步骤如下:

  1. 添加Lombok依赖
  2. 使用@Slf4j注解输出日志

6.1 使用Lombok输入日志

1.添加Lombok依赖:
在这里插入图片描述
2. 使用@Slf4j注解输出日志:

package com.example.demo.Controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@Slf4j
public class LogConntroller2 {

    @RequestMapping("/log2")
    public void doLog() {
        String msg = "通过Lombok输出日志";
        log.trace("trace -> " + msg);
        log.debug("debug -> " + msg);
        log.info("info -> " + msg);
        log.warn("warn -> " + msg);
        log.error("error -> " + msg);
    }
}

在这里插入图片描述

6.2 Lombok输出日志原理

Lombok在代码编译的时候(.java -> .class)将Lombok注解转换成相应的代码。这里我们可以通过项目下的target目录下找到答案:

在这里插入图片描述
Lombok作用原理如下:
在这里插入图片描述

6.3 Lombok常见注解介绍

基本注解:

在这里插入图片描述

组合注解:
在这里插入图片描述
日志注解:
在这里插入图片描述

通过上述注解我们也可发现@Data这个组合注解的用处,在以后我们的代码编写中就可以使用此注解代替Getter+Setter+toString()等一系列的注解进行使用。同时我们也可通过target目录看@Data注解是如何进行编译的,这里就不做举例了。
今天的内容分享就到此结束了。

  • 50
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值