【SpringBoot】-SpringBoot日志文件

发布时间:2024年01月05日

作者:学Java的冬瓜
博客主页:?冬瓜的主页🌙
专栏【Framework】
主要内容:使用Logger对象打印日志,利用注解更简单的打印SpringBoot日志。日志级别的设置。日志的持久化存储。

一、日志文件的作用

作用A: 记录错误日志和警告日志(发现或定位问题)
作用B: 记录用户登录日志,方便判断用户是正常登录还是恶意登录操作。
作用C: 记录系统的操作日志,方便恢复数据和定位操作人。

二、SpringBoot日志打印

SpringBoot日志使用了门面模式,内置了SLF4J和LogBack,SLF4J使得开发人员可以使用统一的接口,而不需要关心日志具体的实现。LogBack就是日志的具体实现。如下图:
在这里插入图片描述

1、Logger对象打印 SpringBoot 日志

代码:

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@ResponseBody
//等价于RestController
@RequestMapping("/test")
public class TestController {
    //注意:选择slf4j类型的Logger定义
    private static final Logger log =LoggerFactory.getLogger(TestController.class);

    @RequestMapping("/active")
    public String active(){
        System.out.println("==================================");
        log.trace("this is a trace");
        log.debug("this is a debug");
        log.info("this is a info");
        log.warn("this is a warn");
        log.error("this is a error");
        System.out.println("==================================");
        return "hello trace";
    }
}

打印结果:
在这里插入图片描述

注解:
1> 在获取对象时,如果像上图一样使用 类(.class)获取日志,那么日志打印结果就是包名+类名的方式;但如果是使用类名,那么日志打印结果为类名,包名不会打印。
2> Logger对象定义的日志,是使用slf4j下的Logger对象。

2、利用Lombok+@Slf4j 注解打印 SpringBoot 日志

注意:使用LomBok的目的是为了在 log. 的时候,可以识别到@Slfj注解下的方法。
Lombok原理:Lombok是在Java代码编译成字节码前执行的。在点运行后,编译Java代码前,Lombok会检查到代码中使用了 @Slf4j,那它就会自动给Java源文件中加上log日志对象,然后再进行编译生成字节码文件。(可以在缓存文件中查看验证)
在这里插入图片描述

使用Lombok和@Slf4j打印日志信息步骤:
1> 引入Lombok, 2> 使用@Slf4j注解 3> 直接使用log作为日志对象使用

@RestController
@Slf4j // 给当前类添加一个 名称为 log 的日志对象,相当于TestController中Slf4j包内Logger对象

public class TestController2 {
    @RequestMapping("/test/fuc")
    public String func(){
        // 注意:使用LomBok的目的是为了在 log. 的时候,可以识别到@Slfj注解下的方法。
        log.info("this is a info");
        return "succeed!";
    }
}

三、日志级别的 认识和设置

日志级别
在这里插入图片描述

理解:日志级别有什么用处?

1> 日志级别可以帮我们筛选出重要的信息,比如设置日志级别为error,那么程序运行起来后只有error级别及以上的错误信息才会展示,方便观察。
2> 日志级别可以控制不同环境下,需要打印的不同日志信息。比如比如开发环境我们需要很详细的日志信息,方便调bug;而生产环境为了保证性能和安全性就会打印尽量少的日志。

怎么设置日志级别?

首先要知道,spring boot默认日志级别为info。我们可以在配置文件中设置日志的级别。下面是通过设置日志级别 控制不打印系统日志信息,只打印我们手写代码日志的设置
第一步:如下图,就是利用上篇博客的分环境使用配置文件,在开发阶段使用dev(在application.yml里设置指定)。
在这里插入图片描述
第二步:在dev配置信息中设置logging->level->root作为系统日志打印信息,即只有error和fatal的错误可以打印,所有如果启动系统时没有错误,那么就只会打印springboot启动的logo,没有系统日志信息被打印。
第三步:要打印的类的日志级别,需要在root同等级的目录下添加 包名+类名com->example->demo->controller->TestController
在这里插入图片描述

日志打印结果:

理解:由于系统日志级别设置为error,程序又运行正常,所以没有系统日志信息打印(只有SpringBoot的logo);而我们自定义的TestController类的日志级别设置为了trace,因此对于TestController类的日志信息来说,日志级别为trace及以上的日志信息均可打印。因为trace是最低日志级别,也就相当于关于TestController类的方法中要打印的日志可以全部打印。
在这里插入图片描述

四、SpringBoot 日志的持久化

1、日志持久化的写法

注意:要想持久化存储日志,可以指定日志存储目录(1),也可直接指定日志文件的名称(2)

1> 指定日志存储目录:这种操作会指定到 E:\home 目录,如果没有会创建(我这里名字未被改成home,而是显示新建目录),并将日志文件在该目录中创建出来,并把日志信息写入日志文件

logging:
  file:
    # 第一种:
    path: E:\\home

2> 指定日志文件的名称:这种操作是 创建日志文件,将它放在指定路径中,如果未指定,则按以下方式存储

logging:
  file:
    # 第二种:未设置log文件的地址,只设置了名称,会保存在当前项目中
    name: springboot.log  
    # 第三种:保存在E盘home路径下springBoot的log文件中,如果无home目录,则启动项目时会自动先创建。
    name: E:\\home\\springBoot.log  
    # 第四种:保存在E盘 home路径下,日志文件名字为home。
    name: E:\\home   

2、日志持久化的理解和展示

  • 生产级别日志分类:1>程序运行日志(存放在文件中) 2>业务日志(存放在数据库中)
  • 日志文件占用空间最大值是10mb,每次打印日志信息都会在原来的日志文件末尾接着写日志信息,直到超过10mb,就会创建新的日志文件。
文章来源:https://blog.csdn.net/m0_63979882/article/details/132296269
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。