1. 日志框架基础

Spring Boot 默认使用 Spring Framework Logging 模块以及底层的 SLF4J + Logback 组合。

  • SLF4J(Simple Logging Facade for Java):统一日志门面,为各种日志框架提供统一抽象接口。
  • Logback:高性能日志实现框架,作为 Spring Boot 默认的日志实现。

2. 日志打印方式(API 使用方式)

在 Spring Boot 项目中,一般使用 SLF4J 的接口来书写日志代码,从而保持与底层实现解耦。典型使用方法如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ExampleClass {
    private static final Logger logger = LoggerFactory.getLogger(ExampleClass.class);

    public void doSomething() {
        logger.info("This is an info log message.");
        logger.debug("Debug level message: {}", someVariable);
        logger.error("An error occurred.", exceptionObject);
    }
}

通过 LoggerFactory 获取 Logger,然后用 debug、info、warn、error 等方法进行日志输出。

还有另一种常见方法:

@Slf4j//作用于源码阶段
@RestController
@RequestMapping("/p2")
public class LoggerLevelController2 {

    @RequestMapping("/p")
    public String print(){

        //直接用log打印即可
        log.trace("trace"+"日志");
        log.debug("debug"+"日志");
        log.info("info"+"日志");
        log.warn("warn"+"日志");
        log.error("error"+"日志");
        return "打印日志";
    }
}

第二种方式和第一种方式本质是一样的,因为@Slf4j 帮我们自动创建了一个名字为log的日志打印对象(作用于源码阶段),进而可以直接调用log。

3. 日志级别(Logging Level)

常用的日志级别从低到高为:TRACE < DEBUG < INFO < WARN < ERROR<FATAL

  • TRACE:最详细的信息,一般用于问题诊断和跟踪。
  • DEBUG:调试级别信息,侧重于开发过程中的细粒度信息。
  • INFO:关键信息,标明应用程序运行状态变化,如启动、停止、配置加载完成等。(一般认为是正常信息)
  • WARN:潜在有问题的状况,不一定是错误,但值得关注。
  • ERROR:表示系统中的错误事件,需要尽快调查和修复。
  • FATAL: 致命信息,表示需要立即被处理的系统级错误.

Spring Boot 默认的日志级别是 INFO,即低于 INFO 的日志(如 DEBUG、TRACE)默认不显示。

4. 日志配置(Logging Configuration)

Spring Boot 提供多种方式定制日志设置。常见的配置文件为 application.propertiesapplication.yml 中的配置项。
这里以yml文件为例:

1、更改整个程序的日志级别

logging:
  level:
    root: error

这样只会打印,等级大于等于error的日志,对于一个正常运行的程序,控制台几乎就没有日志了:在这里插入图片描述

2、更改指定模块的日志级别

logging:
  level:
    root: error
    com:
      hyy:
        captcha:
          controller: info

com.hyy.captcha.controller目录下的程序将会打印大于等于info等级的日志:
在这里插入图片描述

5. 日志持久化(Logging Persistence)

存储相对路径:

logging:
  file:
    #设置日志文件的相对路径以及文件名
    name: logger/my.log

执行程序后,产生了一个文件夹:
在这里插入图片描述
这个配置也可以是绝对路径,加上/即可:

logging:
  file:
    #设置日志文件的文件名
    name: /logger/my.log

另外,还可以通过path来设置路径,但是name的优先级大于path:

  file:
    #设置日志文件的文件名
    name: logger/my.log
# 设置日志文件的目录
    path: D:/temp #只能设置路径,名字默认spring.log,有name不会生效

6. 日志分割与归档(Log Rotation)

随着时间推移,日志文件会变得巨大且难以管理。通过日志分割策略,可以将日志按日期(每天一个文件)、按文件大小达到阈值时自动滚动创建新文件,从而保持日志文件的可控大小和便于检索管理。
具体配置方式:

# 对日志进行分割
  logback:
    rollingpolicy:
      max-file-size: 1KB #1kb分割一次
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i #可以设置分割文件的后缀
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐