升级Spring Cloud后Config Client无配置中心不可用日志如何调试
问题原因
- 引导阶段日志缓存默认开启:从Spring Cloud 2020.0.x(Ilford)版本开始,Config Client在引导上下文加载阶段(也就是拉取远程配置的阶段)的日志默认会被缓存,只有等上下文初始化完成(即Config Server连接成功、配置加载完毕)后才会统一输出,所以连接超时、重试相关的日志不会即时打印,看起来就像应用直接挂起。
- 重试机制默认配置调整:新版Config Client默认的连接重试逻辑未开启快速失败,会无限次重试连接Config Server,重试过程中所有相关日志都被暂存到缓存中,不会对外输出。
- 你日志中出现的
entityId格式错误是日志框架初始化阶段抛出的内容,不属于引导上下文缓存范围,所以会即时输出,不会和Config相关日志一起被缓存。
调试与修复方案
- 关闭引导日志缓存:优先在
bootstrap.properties(或对应yaml格式配置文件)中添加以下配置,引导阶段的日志就会即时输出,可直接查看连接超时、重试的相关记录:spring.cloud.bootstrap.log-cache-enabled=false - 开启连接失败快速响应:如果不需要无限等待Config Server恢复,可添加配置让应用连接Config Server失败时直接报错退出,避免无意义挂起:
如需自定义重试规则,可额外添加以下配置调整重试次数和间隔:spring.cloud.config.fail-fast=true# 最大重试次数 spring.cloud.config.retry.max-attempts=3 # 初始重试间隔,单位毫秒 spring.cloud.config.retry.initial-interval=1000 - 开启Config Client debug日志:添加日志级别配置,输出更详细的连接、拉取配置过程信息,方便定位问题:
logging.level.org.springframework.cloud.config.client=DEBUG - 修复日志格式错误:日志中提示的
Unrecognized format specifier [entityId]是因为日志输出格式中使用了%entityId占位符,但没有引入对应的MDC扩展组件,修复该问题可避免日志输出异常干扰调试。
内容的提问来源于stack exchange,提问作者Marx
相关产品推荐
相关产品推荐

