Logback配置pattern后日志输出行首出现多余空格如何解决
问题原因及解决方案
场景1:日期前存在前置空格
该场景占90%以上的概率,触发原因是<pattern>标签内的规则内容开头存在多余的空白字符(换行、空格、制表符等):
- 很多人配置时为了代码格式化,会把规则内容单独放一行,标签和内容之间的空白会被logback直接识别为pattern的一部分,输出到每一行日志的最开头
- 修复方案:将
<pattern>标签和规则内容紧挨着编写,不要留开头空白:
<!-- 错误示例(标签和内容之间有换行) --> <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} %yellow([%X{Auth-Scopes:-},%X{Auth-Principal:-},%X{Auth-Organization:-}]) %magenta(${PID:-}) --- [%15.15t] %cyan(%-40.40logger{39}) : %m %n ${LOG_EXCEPTION_CONVERSION_WORD:-%xEx} </pattern> <!-- 正确示例(标签和内容紧挨着) --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} %yellow([%X{Auth-Scopes:-},%X{Auth-Principal:-},%X{Auth-Organization:-}]) %magenta(${PID:-}) --- [%15.15t] %cyan(%-40.40logger{39}) : %m %n ${LOG_EXCEPTION_CONVERSION_WORD:-%xEx}</pattern>
场景2:日期和日志级别之间存在多余空格
触发原因是日志级别配置的%5p为右对齐规则:
%5p要求日志级别固定占5个字符宽度,右对齐。INFO、WARN仅占4个字符时,会自动在前面补1个空格实现对齐,看起来就像多出了前置空格- 修复方案:将右对齐改为左对齐
%-5p,不足5位时空格补在级别后面,不会出现在级别前面:
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%-5p} %yellow([%X{Auth-Scopes:-},%X{Auth-Principal:-},%X{Auth-Organization:-}]) %magenta(${PID:-}) --- [%15.15t] %cyan(%-40.40logger{39}) : %m %n ${LOG_EXCEPTION_CONVERSION_WORD:-%xEx}</pattern>
特殊场景排查
如果上述两种方案都无法解决,可排查以下两点:
- 是否引入了封装的日志组件starter,部分自定义组件会强制给所有日志添加固定前缀空格
- 项目依赖的父工程/公共包中是否存在全局日志pattern配置,覆盖了本地设置的规则
内容的提问来源于stack exchange,提问作者Viraj
相关产品推荐
相关产品推荐

