Bootstrap

Spring Boot 日志

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 今天你敲代码了吗

Spring Boot 日志

5.1 日志用途

  • 系统监控:通过日志记录这个系统的运行状态,每个方法的响应时间,响应状态等.对数据进行分析,超过阈值时报警等
  • 数据采集,如数据统计(统计浏览量,访客量等等),推荐排序(采集数据判断用户喜好)
  • 日志审计,可以判定一些非法攻击,非法调用等等

5.2 日志使用

我们可能最常用的是System.out.println()来打印,但是实际上这种方式缺少了许多信息

SpringBoot内置了日志框架slf4j,可以直接调用

5.2.1 打印日志

得到日志对象
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
  • Logger对象是属于org.slf4j包下的

  • LoggerFactory.``_getLogger_需要传递一个参数,标识这个日志的名称,就能更加清楚地知道是哪个类输出的日志
使用日志对象打印日志
@RestController
public class LoggerController {
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

    @RequestMapping("/logger")
    public String logger() {
        logger.info("=========Test Log=========");
        return "Test Log";
    }
}


5.3 日志格式


日志显示的内容有:

  1. 时间日期
  2. 日志级别(ERROR,WANR,INFO,DEBUG,TRACE)
  3. 进程ID
  4. 线程名
  5. logger名
  6. 日志内容

5.4 日志级别

日志级别代表着日志信息对应问题的严重性,为了更快的筛选目标的日志信息

分类

日志级别从高到低依次为:FATAL,ERROR,WARN,INFO,DEBUG,TRACE

  • FATAL:致命信息,表示需要被立即处理的系统级别错误
  • ERROR:错误级别,级别比较高的错误日志信息,但不影响系统的继续运行
  • WARN:警告信息,不影响使用,但需要注意的问题
  • INFO:普通信息,用于记录应用程序正常运行时的一些信息,例如系统启动完成、请求处理完成等
  • DEBUG:调试信息,需要调试时候的关键信息打印
  • TRACE:追踪信息,比BEBUG更加细粒度的信息时间
使用

针对不同的日志级别,Logger对象分别提供了对应的方法,来输出日志

@RestController
public class LoggerController {
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
    @RequestMapping("/logger2")
    public void logger2() {
        logger.trace("========= trace =========");
        logger.debug("========= debug =========");
        logger.info("========= info =========");
        logger.warn("========= warn =========");
        logger.error("========= error =========");
    }
}


但是实际上只是打印了INFO以上的级别的日志
这与日志的配置有关,日志的输出默认级别是info级别

5.5 日志配置

配置日志级别

配置日志级别只需要在配置文件中设置"logging.level"配置项即可:

logging.level.root=debug

此时日志就能打印debug以上级别的日志了

但是此时我们会发现spring boot自带的debug级别的日志也都显示出来了,我们可以设置单独某一个地方的日志:

日志持久化

我们通常需要将日志保存起来.以便出现问题之后追溯,日志持久化有两种方式:

  1. 配置日志文件名
  2. 配置日志的存储目录
配置日志的路径和文件名
logging.file.name=logger/springboot.log

运行后可以看到:


路径就会存储在这里面

配置日志文件的保存路径
logging.file.path=D:/temp


注意:logging.file.namelogging.file.path两个都配置的情况下,只生效其一.以logging.file.name为准

配置日志文件分割

如果我们的日志文件都放在同一个文件,那么随着项目的运行,日志文件会越来越大,需要对日志文件进行分割
默认日志文件超过10M就会进行分割

logging.logback.rollingpolicy.max-file-size=2KB
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.zip


配置日志格式

默认的日志格式是这样的

这些内容都是可以配置的,支持控制台配置和日志文件配置
配置控制台日志格式配置
logging.pattern.console
默认值是:

%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM
dd'T'HH:mm:ss.SSSXXX}}){faint}%clr(${LOG_LEVEL_PATTERN:-
%5p})%clr(${PID:-}){magenta}%clr(---){faint}%clr([%15.15t])
{faint}%clr(%-40.40logger{39}){cyan}%clr(:){faint}
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

配置日志文件的日志格式
logging.pattern.file

%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM
dd'T'HH:mm:ss.SSSXXX}}${LOG_LEVEL_PATTERN:-%5p}${PID:-}
---[%t]%-40.40logger{39}:
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

配置项说明:

  1. %cir(表达式)(颜色):设置输出日志的颜色

支持的颜色有:blue,cyan,faint,green,magenta,red,yellow

  1. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}:日期和时间–精确到毫

  1. %5p 显示日志级别ERROR,WARN,INFO,DEBUG,TRACE

  2. %t 线程名.%c全限定类名.%m method.%L为行号.%thread线程名.%m或者%msg

显示输出消息.%n换行符

  1. %5 若字符长度小于5,则右边用空格填充. %-5 若字符长度小于5,则左边⽤空格填充. %.15 若字符长度超过15,截去多余字符. %15.15 若字符长度小于15,则右边用空格填充.若字符⻓度超过15,截去多余字符

实际上通常情况下,使用默认的日志输出格式即可

5.6 更简单的日志输出

lombok给我们提供了更加简单的方式

  1. 添加lombok依赖
  2. 使用@slf4j注解输出日志
@Slf4j
@RestController
public class LoggerController {

    @RequestMapping("/logger")
    public String logger() {
        log.info("=========Test Log=========");
        return "Test Log";
    }

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

我们查看idea反编译的字节码:

实际上就是 lombok提供的@Slf4j会帮我们提供一个日志对象log,直接使用即可

感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 今天记得敲代码
;