-
-
Notifications
You must be signed in to change notification settings - Fork 10.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
增加EnvironmentPostProcessor处理,将Apollo配置加载提到初始化日志系统之前 #1614
增加EnvironmentPostProcessor处理,将Apollo配置加载提到初始化日志系统之前 #1614
Conversation
af8d9cc
to
2dd9ff7
Compare
2dd9ff7
to
0c7c7ed
Compare
0c7c7ed
to
ac2baee
Compare
Thanks! Will take a detailed look soon. |
作者看着好眼熟。。。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This works great!
However, there is an issue of the executing sequence of initializeSystemProperty, so I submitted a pull request to your repository instead, please have a look - LuanLouis#1
Thank!
fix the executing sequence of initializeSystemProperty
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
这个方案解决了logback可以加载到apollo的配置,但是修改apollo无法做到日志参数跟着变,比如修改日志级别。看了springboot关于 logback扩展的文档,如果使用了扩展,logback原本的scan功能将失效,不知道跟这个是否有关系,希望能够优化。原文地址:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-logback-extensions |
如果只是日志级别的话,是可以做到动态修改日志级别的。 添加@ApolloConfigChangeListener注解,然后在application这个默认(看看你是不是使用的默认namespace)的namespace里添加对应日志级别即可控制细化到某一类的日志级别。 |
@nobodyiam @LuanLouis 测试了springboot 项目(无logback.xml)的情形和spring+logback.xml的情形以及spring+logback-spring.xml的情形, 发现这个配置只在springboot项目下生效, 在spring项目中无效, 是吗? |
@lawrencewu |
@nobodyiam 有两个问题 1. 那在Spring下有什么办法能让logback.xml读取apollo配置中心里面的内容吗? 如下面配置中的logger_logback_logpath. 2. 在3.2.1.3 Spring Boot集成方式(推荐)中应该是只针对springboot的应用吧, 针对spring应用该如何操作,能不能进一步细化该节的文档?
|
解决的问题:
将Apollo的配置加载提到Spring 初始化日志系统之前,能够让 logback-spring.xml可以读取到Apollo中的配置数据
目前版本存在的问题:
目前Apollo加载配置信息的时机如下图所示:
目前Apollo加载配置信息的时机比日志系统初始化晚,如果要让logbak-spring.xml文件能够正常读取Apollo的配置,则有两种方案可供选择:
方案一:在
ConfigFileApplicationListener
和LoggingApplicationListener
之间插入一个监听器,用于初始化Apollo 配置信息;这种方式在SpringBoot模式下想在这两者之间插入一个Listener 有点问题,Spring Boot 会将添加的Listener踢掉,目前还没弄清楚咋回事;另外这种插入方式和Listener的Order顺序有关,写死顺序不是很优雅;
方案二:实现一个
EnvironmentPostProcessor
,供ConfigFileApplicationListener
在加载好bootstrap.properties 和application.properties之后加载Apollo的配置信息这种方式比较好些,添加一个
EnvironmentPostProcessor
实现,然后在spring.factories
里面指定即可注意:
这种方式使得Apollo的加载顺序放到了日志系统加载之前,会导致Apollo的启动过程无法通过日志的方式输出(因为执行Apollo加载的时候,日志系统压根没有准备好呢!所以在Apollo代码中使用Slf4j的日志输出便没有任何内容)
这种加载时间太靠前的方式不是必选的,通过参数
apollo.bootstrap.eagerLoad.enabled
可控制是否走这种逻辑: