Spring Cloud Config Server刷新时禁用scan的logback自动重配置是否为预期行为?
结论
该行为是Spring Cloud框架的预期设计,和logback自身的scan开关没有关联。
原因说明
- Spring Cloud Context默认提供了
LoggingRebinder组件,它会监听EnvironmentChangeEvent事件:只要Spring上下文的环境属性发生变更(包括你通过Config Server推送、Cloud Bus广播触发的属性刷新),该组件就会主动触发日志系统的全量重初始化。 - 日志系统重初始化时,会重新读取你jar包内的logback XML配置,同时会把当前Spring Environment中最新的属性全部注入到logback的上下文环境中,供配置里的条件判断、占位符替换使用,所以你修改的
smtpEnabled属性会自动生效。 - logback自带的scan功能是logback自身定时扫描配置文件变更的能力,和Spring Cloud主动触发的日志重配置是完全独立的两个逻辑,因此就算关闭了logback的scan功能,Spring主动触发的重加载行为依旧会执行。
可选关闭方式
如果你不需要这种环境变更自动刷新日志配置的行为,可以在项目配置中添加:
spring.cloud.logging.refresh.enabled=false
即可禁用该自动重配置逻辑。
内容的提问来源于stack exchange,提问作者Ruelos Joel
相关产品推荐
相关产品推荐

