apolloconfig / apollo

Apollo is a reliable configuration management system suitable for microservice configuration management scenarios.
https://www.apolloconfig.com
Apache License 2.0
29.13k stars 10.2k forks source link

springcloud 动态调整Logging Level时,项目私有namespace中的配置 更新无效 #1911

Closed mstao closed 5 years ago

mstao commented 5 years ago

现在有一个配置项logging.level.root,代表日志级别,如果该项配置在application 的namespace下,实时刷新日志即可有效,但将该配置项移到新建的logger的namespace中,更改该项配置,项目不会刷新该配置. 示例代码:地址,日志级别刷新代码:链接

我在项目的application.yml添加如下配置:

apollo:
  meta: http://localhost:8762
  bootstrap:
    enabled: true
    namespaces: application,logger
    eagerLoad:
      enabled: true

同时在apollo配置页面上配置如下:

snipaste_2019-01-24_12-53-27

是我用的哪个地方不对吗?

mstao commented 5 years ago

我在Java客户端使用指南#三客户端用法 发现

@ApolloConfig
private Config config; //inject config for namespace application

这个是注入namespace application的,如果非application,

可以这样吧:

  @ApolloConfig(value = "logger")
  private Config config;

我测试了一下,这样写,更改配置后,也不会刷新

mstao commented 5 years ago

看了文档,@ApolloConfig 和 @ApolloConfigChangeListener 都需要指定namespace,所以这样写:

  @ApolloConfig("logger")
  private Config config;

  @PostConstruct
  private void initialize() {
    refreshLoggingLevels(config.getPropertyNames());
  }

  @ApolloConfigChangeListener("logger")
  private void onChange(ConfigChangeEvent changeEvent) {
    refreshLoggingLevels(changeEvent.changedKeys());
  }