目录
什么是日志
日志的作用
日志的格式
日志的级别
日志的自定义
日志的持久化
它是程序在运行过程当中输出的一些提示或异常信息,我们可以通过日志来观察程序执行的情况,如果程序出现 Bug,我们可以根据日志去发现和排查程序的 Bug。
SpringBoot内置了slf4j 和 logback 两个日志框架,slf4j是我们日常开发中常用的框架,logback则是日志实现的底层框架,我们一般通过slf4j 来调用logback完成具体的实现
SLF4J 并不是真正完成了日志实现的框架,它只是一个门面或者一个代理,我们调用 SLF4J 的 API,SLF4J 中还会去调用 logback 这样的日志实现框架,此时我们就不必关心日志实现的细节,这一层面我们是感知不到的,这就是门面模式所带来的好处,还有一个好处就是如果日志实现层出现了漏洞,只需要修改更换日志实现的框架即可,而 SLF4J 可以匹配相应的日志框架,此时虽然日志实现的框架发生了改变,但我们写的代码仍然不受影响,这样就使得系统的依赖性降低,利于系统更新和维护。
能够帮助程序猿排除程序的 Bug。
记录用户登录日志,方便分析用户是正常登录还是恶意破解用户。
记录系统的操作日志,方便数据恢复和定位操作人。
记录程序的执行时间,方便为以后优化程序提供数据支持。
日志分级的作用: 可以将业务不需要的日志信息屏蔽掉
日志级别的作用:
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日志被打印了
以上是设置全局的日志级别
如果要设置局部的日志级别则如下
依照目录的路径设置,此时设置的日志级别就只针对当前类了
重启刷新后可以看到只打印了warn和error
前面的介绍都是将日志输出在控制台上的,然而我们在生产环境下往往需要将日志保存下来,以便于后续出现问题时去追溯原因,将日志保存下来的过程就称之为持久化。
实现日志持久化的方式就是将日志信息保存到磁盘,同样可以通过设置配置文件实现。
在propertise配置文件里
重启后,就会按照目录路径自动生成一个spring.log,里面保存的就是日志信息
也可以自己命名一个文件
还要注意,多次访问程序产生的日志是以追加的形式保存到日志文件当中的,SpringBoot 默认保存日志文件的大小为10MB,
超出范围就会自动创建新的日志文件,然后保存到新的日志文件当中。
当然,也可以通过配置文件自定义日志文件的大小,配置方式如下: