
Spring Boot 默认日志格式会截断过长的 logger 名称(如包路径),可通过自定义 Logback 的 %logger 转换符配置取消截断,从而完整显示全限定类名。
spring boot 默认日志格式会截断过长的 logger 名称(如包路径),可通过自定义 logback 的 `%logger` 转换符配置取消截断,从而完整显示全限定类名。
在 Spring Boot 项目中,日志输出中的 com.zaxxer.hikari.HikariDataSource 或 c.w.d.S.selectAllProperties 这类缩写,本质是 Logback 对 logger 字段按固定长度做了截断处理(例如默认使用 %logger{30})。要让日志始终显示完整的包路径(如 com.wisdom.dao.SysPropertyMapper.selectAllProperties),关键在于修改日志框架的格式模板。
✅ 解决方案:调整 Logback 日志模式
Spring Boot 默认使用 Logback 作为日志实现。你需要在 src/main/resources/logback-spring.xml(或 logback.xml)中定位
<encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{30} - %msg%n</pattern></encoder>
其中 %logger{30} 表示:最多显示 30 个字符的 logger 名称,超出部分用缩写(如 c.w.d.S.selectAllProperties)代替,但保证类名不被截断。
要显示完整包路径,只需移除长度限制:
<!-- ✅ 推荐:显示完整全限定类名 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
或者指定一个足够大的值(如 {100}),兼顾可读性与完整性:
<!-- ⚠️ 折中方案:设为 100 字符,覆盖绝大多数场景 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{100} - %msg%n</pattern>
? 注意:%logger 等价于 %logger{0},表示「不截断,原样输出」;而 %logger{0} 与 %logger{MAX}(如 {999})效果一致,均输出完整 FQCN(Fully Qualified Class Name)。
? 验证效果
修改后重启应用,日志将变为:
2023-05-22 13:21:20.721 DEBUG 76276 --- [ main] com.wisdom.dao.SysPropertyMapper.selectAllProperties : ==> Preparing: SELECT SKEY, SDATA FROM SYS_PROPERTY
而非缩写的 c.w.d.S.selectAllProperties,极大提升大型代码库中日志溯源的可读性与调试效率。
? 补充说明
- 若未自定义 logback-spring.xml,Spring Boot 会启用默认配置(位于 spring-boot-starter-logging 内部),此时需显式添加配置文件才能覆盖。
- 使用 logback-spring.xml(而非 logback.xml)可支持 Spring Profile 激活不同日志配置,更符合生产实践。
- 其他常用转换符:%class(仅类名)、%method(方法名)、%line(行号)等,可根据需要组合增强诊断能力。
通过精准控制 %logger 的格式参数,你既能获得清晰完整的调用上下文,又无需引入额外依赖或修改代码逻辑——这是 Spring Boot 日志定制中最轻量、最有效的优化之一。











