SpringBoot-⽇志的配置和使⽤详解(SLF4j、Logback)
1,基本介绍
(1)市⾯上常见的⽇志框架有很多。通常情况下,⽇志是由⼀个抽象层+实现层的组合来搭建的,⽽⽤户通常来说不应该直接使⽤具体的⽇志实现类,应该使⽤⽇志的抽象层。
    抽象层:JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for Java)、jboss-logging
    实现层:Log4j 、JUL(java.util.logging)、Log4j2、Logback
(2)SpringBoot 默认选择的是 SLF4J + Logback 的组合,如果不需要更改为其他⽇志系统(如 Log4j2 等),则⽆需多余的配
置,LogBack 默认会将⽇志打印到控制台上。
 由于新建的 Spring Boot 项⽬⼀般都会引⽤ spring-boot-starter 或者 spring-boot-starter-web,⽽这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,我们⽆需额外添加依赖。
2,基本⽤法
(1)这⾥我们打印出 5 种不同级别的⽇志,可以看到控制台会输出相关⽇志信息:
1
2 3 4 5 6 7 8 9 10 11 12 13 14@RestController
public class HelloController {
Logger logger = Logger(getClass());    @GetMapping("/test")
public void test(){
logger.debug("Debug ⽇志...");
logger.info("Info ⽇志...");
logger.warn("Warn ⽇志...");
<("Error ⽇志...");
}
}
(2)如果项⽬有使⽤ Lombok 的话,直接使⽤ @Slf4j 注解可以省去从⽇志⼯⼚⽣成⽇志对象这⼀步,直接进⾏⽇志记录。下⾯代码的效果同上⾯是⼀样的:
1
2 3 4 5 6 7 8 9 10 11 12 13@RestController
@Slf4j
public class HelloController {
@GetMapping("/test")
public void test(){
log.warn("Warn ⽇志...");        ("Error ⽇志...");    }
}
3,设置⽇志级别
(1)⽇志级别从⼩到⼤为 trace < debug < info < warn < error < fatal,由于默认⽇志级别设置为 INFO,因此上⾯样例 trace 和 debug 级别的⽇志都看不到。
(2)我们可以在 applicaition.properties ⽂件中修改⽇志级别。⽐如下⾯将全局⽇志级别都改成 trace,因此系统所有的⽇志都能看到:
=trace
(3)我们也可以只设置某个包的⽇志级别,这样能够更⽅便准确地定位问题。⽐如下⾯配置,只对所有 ample 包下⾯产⽣的⽇志级别改成 trace:
ample=trace
4,⽣成⽇志⽂件
(1)除了将⽇志打印到控制台中,项⽬上线后通常还需要将⽇志输出到⽂件。我们只需要通过 logging.file.path 配置⽂件存放路径即可:1logging.file.path=/Volumes/BOOTCAMP/log
(2)通过 logging.file.path ⽣成的⽇志⽂件名字为 spring.log,如果需要⾃定义⽂件名字,则通过 logging.file.name 属性进⾏配置(此时不需要再配置 logging.file.path):
1logging.file.name=/Volumes/BOOTCAMP/log/my.log
(3)⽆论何种设置,Spring Boot 都会⾃动按天分割⽇志⽂件,也就是说每天都会⾃动⽣成⼀个新的 log ⽂件,⽽之前的会⾃动打成 GZ 压缩包。
(4)除此之外,我们还可以设置⽇志⽂件的保留时间,以及单个⽂件的⼤⼩:
1 2 3 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:平台的换⾏符
1 2 3 4# 修改在控制台输出的⽇志格式
sole=%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger : %msg%n # 修改输出到⽂件的⽇志格式
log4j2不打印日志
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n
(2)上⾯效果图可以发现,原先 Spring Boot 默认使⽤ Logback 来进⾏⽇志输出时,控制台不同参数会输出为不同的颜⾊。⽽⼀旦我们修改了⽇志格式,彩⾊也随之消失。如果想让不同类型的数据具有不同的⾼亮效果,可以改⽤如下配置:
1 2 3 4# 修改在控制台输出的⽇志格式
sole=%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 个字符,超过得话包名部分会变成缩写:
1 2 3 4# 修改在控制台输出的⽇志格式
sole=%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