Spring Boot 3.0.6中Logback PatternLayout %C{1.}格式报错问题
问题解决:Spring Boot 3.0.6中Logback %C{1.}格式报错的原因及修复
原因分析
Spring Boot 3.x系列默认依赖Logback 1.4.x版本,而Spring Boot 2.7.x依赖的是Logback 1.2.x版本。两者在%C(或等价的%logger)模式的参数语法上有重大变更:
- 在Logback 1.2.x中,
%C{1.}的语法表示保留最后1个包段 + 类名(例如com.example.demo.MyService会输出d.MyService) - 在Logback 1.4.x中,原有的
{n.}语法被移除,解析器会严格将%C后的参数当作整数解析,同时新增{n.-}语法实现“保留最后n个包段+类名”的效果。因此%C{1.}中的1.会被当作无效整数,触发NumberFormatException。
修复方案
将%C{1.}替换为%C{1.-},即可实现和原来完全一致的日志格式效果。修改后的Appender配置如下:
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.-}): %msg%n%throwable </Pattern> </layout> </appender>
也可以使用等价的%logger{1.-}来替代%C{1.-},两者功能完全相同。
补充说明
如果需要保留前n个包段+类名,Logback 1.4.x直接使用%C{n}即可(例如%C{2}会将com.example.demo.MyService输出为c.e.MyService),这部分语法和旧版本保持一致。
内容的提问来源于stack exchange,提问作者Bernadett Kovács-Szenti
相关产品推荐
相关产品推荐

