日志配置
上述是日志的使用,日志框架支持我们更灵活的输出日志,包括内容、格式等
配置日志级别
日志级别配置只需要在配置文件中设置“logging.level
”配置即可,如下所示
logging:
level:
root: debug
日志持久化
以上的日志都是输出在控制台上的,然而在线上的环境中,我们需要把日志保存下来,以便出现问题之后追溯问题。把日志保存下来就叫持久化
日志持久化有两种方式
- 配置日志文件名
- 配置日志的存储目录
相关配置
配置日志文件的路径和文件名
logging:
file:
name: logger/springboot.log
- 运行结果显示,日志内容保存在了对应目录下
配置日志文件的保存路径
# 设置日志文件的目录
logging:
file:
name: /Users/yechiel/Desktop
- 这种方式只能设置日志的路径,文件名为固定的
spring.log
- 运行程序,该路径下出现了一个日志文件
注意:
logging.file.name
和logging.file.path
两个都配置的情况下,只生效其一,以logging.file.name
为准
配置文件分割
如果我们的日志都放在一个文件中,随着项目的运行,日志文件会越来越大,需要对日志文件进行分割
- 当然,日志框架也帮我考虑到了这一点,所以如果不进行配置,就走自动配置
- 默认日志文件超过
10M
就进行分割
配置项 | 说明 | 默认值 |
---|---|---|
logging. logback. rollingpolicy. file-name-pattern | 日志分割后的文件名格式 | ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz |
logging. logback. rollingpolicy. max-file-size | 日志文件超过这个大小就自动分割 | 10MB |
配置文件分割:
logging:
logback:
rollingpolicy:
file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
max-file-size: 1KB
- 日志文件超过
1KB
就分割(设置1KB
是为了更好展示。企业开发通常设置为200MB
,500MB
等,此处没有明确标准) - 分割后的日志文件名为:
日志名.日期.索引
运行项目,多打印一些日志,日志分割结果:
配置日志格式
目前打印的格式是默认的
打印日志的格式,也是支持配置的。支持控制台和日志文件分别设置
配置项 | 说明 | 默认值 |
---|---|---|
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} |
配置项说明: |
%clr
(表达式){颜色}设置输入日志的颜色blue
cyan
faint
green
magenta
red
yellow
%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM- dd'T'HH:mm:ss.SSSXXX}}
日期和时间——精确到毫秒%d{}
日期${LOG_DATEFORMAT_PATTERN:-yyyy-MM- dd'T'HH:mm:ss.SSSXXX}
非空表达式,获取系统属性LOG_DATEFORMAT_PATTERN
。若此属性不存在,则使用-yyyy-MM- dd'T'HH:mm:ss.SSSXXX
格式。系统属性可以通过System.getProperty("LOG_DATEFORMAT_PATTERN")
获取
%5p
显示日志级别error
、warn
、info
、debug
、trace
%t
线程名;%c
类的全限定名;%M
method;%L
为行号;%thread
线程名称;%m
或者%msg
显示输出消息;%n
换行符%5
若字符⻓度⼩于 5,则右边⽤空格填充。%-5
若字符⻓度⼩于 5,则左边⽤空格填充。%.15
若字符⻓度超过 15,截去多余字符。%15.15
若字符⻓度⼩于 15,则右边⽤空格填充。若字符⻓度超过 15,截去多余字符
设置了颜色,但没有生效?
需要配置,让idea
支持控制台颜色显示
- 打开启动配置,添加
VM option
- 添加
VM option
-Dspring.out.ansj.enabled=ALWAYS
- 重新启动程序,就会发现控制台支持颜色了
配置文件
logging:
pattern:
console: '%d{yyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
- 项目运行,观察日志变化:
更简单的日志输出
每次都使用 LoggerFactory.getLogger(xxx.class)
很繁琐,且每个类都添加一遍,Lombok
给我们提供了一种更简单的方式
- 添加
Lombok
框架支持 - 使用
@Slf4j
注解输出日志
添加 lombok 依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
输出日志
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class LogController {
public void log() {
log.info("========要输出日志的内容========");
}
}
lombok
提供的 @Slf4j
会帮我们提供一个日志对象 log
,我们直接使用就可以
总结
- 日志是程序中的重要组成部分,使用日志可以快速的发现和定位问题,
SpringBoot
内置了日志框架,默认使用的是info
日志级别将日志输出到控制台的,我们可以通过Lombok
提供的@Slf4j
注解和log
对象快速的打印自定义日志 - 日志包含了 6 个级别,日志级别越高,收到的日志信息也就越少,我们可以通过配置日志的保存名称或保存目录来将日志持久化