返回 导航

SpringBoot / Cloud

hangge.com

SpringBoot - 日志的配置和使用详解(SLF4j、Logback)

作者:hangge | 2020-03-08 08:10

1,基本介绍

(1)市面上常见的日志框架有很多。通常情况下,日志是由一个抽象层+实现层的组合来搭建的,而用户通常来说不应该直接使用具体的日志实现类,应该使用日志的抽象层。
抽象层JCLJakarta Commons Logging)、SLF4jSimple Logging Facade for Java)、jboss-logging
实现层Log4j JULjava.util.logging)、Log4j2Logback

(2)SpringBoot 默认选择的是 SLF4J + Logback 的组合,如果不需要更改为其他日志系统(如 Log4j2 等),则无需多余的配置,LogBack 默认会将日志打印到控制台上。
    由于新建的 Spring Boot 项目一般都会引用 spring-boot-starter 或者 spring-boot-starter-web,而这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,我们无需额外添加依赖。

2,基本用法

(1)这里我们打印出 5 种不同级别的日志,可以看到控制台会输出相关日志信息:
@RestController
public class HelloController {

    Logger logger = LoggerFactory.getLogger(getClass());

    @GetMapping("/test")
    public void test(){
        logger.trace("Trace 日志...");
        logger.debug("Debug 日志...");
        logger.info("Info 日志...");
        logger.warn("Warn 日志...");
        logger.error("Error 日志...");
    }
}

(2)如果项目有使用 Lombok 的话,直接使用 @Slf4j 注解可以省去从日志工厂生成日志对象这一步,直接进行日志记录。下面代码的效果同上面是一样的:
@RestController
@Slf4j
public class HelloController {

    @GetMapping("/test")
    public void test(){
        log.trace("Trace 日志...");
        log.debug("Debug 日志...");
        log.info("Info 日志...");
        log.warn("Warn 日志...");
        log.error("Error 日志...");
    }
}

3,设置日志级别

(1)日志级别从小到大为 trace < debug < info < warn < error < fatal,由于默认日志级别设置为 INFO,因此上面样例 trace debug 级别的日志都看不到。
(2)我们可以在 applicaition.properties 文件中修改日志级别。比如下面将全局日志级别都改成 trace,因此系统所有的日志都能看到:
logging.level.root=trace

(3)我们也可以只设置某个包的日志级别,这样能够更方便准确地定位问题。比如下面配置,只对所有 com.example 包下面产生的日志级别改成 trace
logging.level.com.example=trace

4,生成日志文件

(1)除了将日志打印到控制台中,项目上线后通常还需要将日志输出到文件。我们只需要通过 logging.file.path 配置文件存放路径即可:
logging.file.path=/Volumes/BOOTCAMP/log

(2)通过 logging.file.path 生成的日志文件名字为 spring.log,如果需要自定义文件名字,则通过 logging.file.name 属性进行配置(此时不需要再配置 logging.file.path):
logging.file.name=/Volumes/BOOTCAMP/log/my.log

(3)无论何种设置,Spring Boot 都会自动按天分割日志文件,也就是说每天都会自动生成一个新的 log 文件,而之前的会自动打成 GZ 压缩包。

(4)除此之外,我们还可以设置日志文件的保留时间,以及单个文件的大小: 
# 日志文件大小
logging.file.max-size=10MB
# 保留的日志时间
logging.file.max-history=10

5,日志输出格式配置

(1)我们可以分别修改在控制台输出的日志格式,以及文件中日志输出的格式:
符号说明:
  • %d{HH:mm:ss.SSS}:日志输出时间
  • %-5level:日志级别,并且使用 5 个字符靠左对齐
  • %thread:输出日志的进程名字,这在 Web 应用以及异步任务处理中很有用
  • %logger:日志输出者的名字
  • %msg:日志消息
  • %n:平台的换行符
# 修改在控制台输出的日志格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger : %msg%n
# 修改输出到文件的日志格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n

(2)上面效果图可以发现,原先 Spring Boot 默认使用 Logback 来进行日志输出时,控制台不同参数会输出为不同的颜色。而一旦我们修改了日志格式,彩色也随之消失。如果想让不同类型的数据具有不同的高亮效果,可以改用如下配置:
# 修改在控制台输出的日志格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %clr(%5p) [%thread] %clr(%logger){cyan} : %msg%n
# 修改输出到文件的日志格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n

(3)如果觉得类名太长(%logger),我们还可以将其设置个长度限制。比如下面限制长度为 45 个字符,超过得话包名部分会变成缩写:
# 修改在控制台输出的日志格式
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %clr(%5p) [%thread] %clr(%logger{45}){cyan} : %msg%n
# 修改输出到文件的日志格式
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n
评论

全部评论(0)

回到顶部