一、前言
不知道大家注意过没有,在Spring Boot项目启动过程中日志打印并没有显示完整的报名,而是显示一些o.a.c
,o.s.web
形式的包名,如下图:
这是为什么呢?
二、原理
首先,我们先看一下Spring Boot项目中默认的日志格式配置。
找到spring-boot包,找到org/springframework/boot/logging/logback/defaults.xml
文件,查看管控端日志输出格式的配置CONSOLE_LOG_PATTERN
内容:
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){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}}"/>
Logback常用的pattern日志格式占位符说明网上说明有很多,这里我们不再赘述,主要关注一下%-40.40logger{39}
,%logger
用于输出日志事件的类的全限定类名,%-40.40logger{39}
就有点特殊了,它表示输出最多39个字符
的日志记录器名称,如果超过则在左侧截断以保证总长度不超过40个字符。
三、扩展
知道原理以后,我们想启动日志显示完整包名就知道该怎么做了,只需要覆盖默认的CONSOLE_LOG_PATTERN
日志格式就行了。
通过在application.yaml
配置文件中配置logging.pattern.console
属性进行日志格式覆盖:
logging:
pattern:
console: '${CONSOLE_LOG_PATTERN:%clr(%d{${LOG_DATEFORMAT_PATTERN:yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID: }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%logger){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}'
重新启动,发现日志打印时全限定类名已经可以完整显示了: