SpringBoot 日志

目录

什么是日志

日志的作用

日志的格式

日志的级别

日志的自定义

日志的持久化


什么是日志

它是程序在运行过程当中输出的一些提示或异常信息,我们可以通过日志来观察程序执行的情况,如果程序出现 Bug,我们可以根据日志去发现和排查程序的 Bug。

SpringBoot内置了slf4j 和 logback 两个日志框架,slf4j是我们日常开发中常用的框架,logback则是日志实现的底层框架,我们一般通过slf4j 来调用logback完成具体的实现

SpringBoot 日志_第1张图片

SLF4J 并不是真正完成了日志实现的框架,它只是一个门面或者一个代理,我们调用 SLF4J 的 API,SLF4J 中还会去调用 logback 这样的日志实现框架,此时我们就不必关心日志实现的细节,这一层面我们是感知不到的,这就是门面模式所带来的好处,还有一个好处就是如果日志实现层出现了漏洞,只需要修改更换日志实现的框架即可,而 SLF4J 可以匹配相应的日志框架,此时虽然日志实现的框架发生了改变,但我们写的代码仍然不受影响,这样就使得系统的依赖性降低,利于系统更新和维护。

日志的作用

能够帮助程序猿排除程序的 Bug。

记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。

记录系统的操作日志,方便数据恢复和定位操作人。

记录程序的执行时间,方便为以后优化程序提供数据支持。

日志的格式

SpringBoot 日志_第2张图片

日志的级别

日志分级的作用:   可以将业务不需要的日志信息屏蔽掉

日志级别的作用:

1.日志级别可以帮我们筛选出重要的信息,比如设置日志级别为 error,那么就可以只看程序的报错日志了,对于普通的调试日志和业务日志就可以忽略了,从而节省开发者信息筛选的时间。
2.日志级别可以控制不同环境下,⼀个程序是否需要打印日志,如开发环境我们就需要很详细的日志信息, 而生产环境为了保证性能和安全性就会输⼊尽量少的⽇志,通过日志的级别就可以实现此需求。

日志的级别有六种,从低到高依次为:

trace        微量,少许的意思,级别最低

debug        需要调试时候的关键信息打印

info        普通的打印信息(默认日志级别)

warn        警告,不影响使用,但需要注意的问题

error        错误信息,级别较高的错误日志信息

fatal        致命的,因为代码异常导致程序退出执行(程序崩溃)的事件,不支持用户自定义

日志的自定义

例如我们新建一个类 LogController ,在这个类中通过日志工厂  LoggerFactory 获取日志对象

导包的时候要注意 Logger 对象是在 org.slf4j 包下的,不要导错。

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

getLogger()方法一般传入传入当前类的类型,这里的参数用来定位日志的归属类,以方便日志输出,输出的日志信息中有了日志的定位, 才能更方便、更直观的定位到问题类。

然后就可以Logger提供的方法打印日志

完整代码如下

package com.example.demo.controller;

import lombok.extern.java.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

    @RequestMapping("/log")
    public void log(){
        log.trace("我是trace");
        log.debug("我是debug");
        log.info("我是info");
        log.warn("我是warn");
        log.error("我是error");
    }
}

启动SpringBoot后,再访问 localhost:8080/log 就能看到打印信息了

可以发现只打印了三行

因为info就是默认日志级别,所以比它更小的级别(trace,debug)都被屏蔽了

我们也可以自定义默认日志级别

在propertise配置文件里设置

这样就将日志级别设置为了debug,此时重新启动然后刷新网页,就能看到debug日志被打印了

以上是设置全局的日志级别

如果要设置局部的日志级别则如下

依照目录的路径设置,此时设置的日志级别就只针对当前类了

SpringBoot 日志_第3张图片

重启刷新后可以看到只打印了warn和error

SpringBoot 日志_第4张图片

日志的持久化

前面的介绍都是将日志输出在控制台上的,然而我们在生产环境下往往需要将日志保存下来,以便于后续出现问题时去追溯原因,将日志保存下来的过程就称之为持久化。

实现日志持久化的方式就是将日志信息保存到磁盘,同样可以通过设置配置文件实现。

在propertise配置文件里

重启后,就会按照目录路径自动生成一个spring.log,里面保存的就是日志信息

SpringBoot 日志_第5张图片

也可以自己命名一个文件

还要注意,多次访问程序产生的日志是以追加的形式保存到日志文件当中的,SpringBoot 默认保存日志文件的大小为10MB,超出范围就会自动创建新的日志文件,然后保存到新的日志文件当中。

当然,也可以通过配置文件自定义日志文件的大小,配置方式如下:

你可能感兴趣的:(JavaWeb,spring,boot,后端)