diff --git a/lab-45/lab-45-apollo-demo-auto-refresh/src/main/java/cn/iocoder/springboot/lab45/apollodemo/listener/LoggingSystemConfigListener.java b/lab-45/lab-45-apollo-demo-auto-refresh/src/main/java/cn/iocoder/springboot/lab45/apollodemo/listener/LoggingSystemConfigListener.java index b88e338f..e68808d6 100644 --- a/lab-45/lab-45-apollo-demo-auto-refresh/src/main/java/cn/iocoder/springboot/lab45/apollodemo/listener/LoggingSystemConfigListener.java +++ b/lab-45/lab-45-apollo-demo-auto-refresh/src/main/java/cn/iocoder/springboot/lab45/apollodemo/listener/LoggingSystemConfigListener.java @@ -1,9 +1,15 @@ package cn.iocoder.springboot.lab45.apollodemo.listener; +import com.ctrip.framework.apollo.Config; +import com.ctrip.framework.apollo.model.ConfigChangeEvent; +import com.ctrip.framework.apollo.spring.annotation.ApolloConfig; +import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener; +import org.springframework.boot.logging.LogLevel; import org.springframework.boot.logging.LoggingSystem; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.util.Set; @Component public class LoggingSystemConfigListener { @@ -16,22 +22,24 @@ public class LoggingSystemConfigListener { @Resource private LoggingSystem loggingSystem; -// @NacosConfigListener(dataId = "${nacos.config.data-id}", type = ConfigType.YAML, timeout = 5000) -// public void onChange(String newLog) throws Exception { -// // 使用 DefaultYamlConfigParse 工具类,解析配置 -// Properties properties = new DefaultYamlConfigParse().parse(newLog); -// // 遍历配置集的每个配置项,判断是否是 logging.level 配置项 -// for (Object t : properties.keySet()) { -// String key = String.valueOf(t); -// // 如果是 logging.level 配置项,则设置其对应的日志级别 -// if (key.startsWith(LOGGER_TAG)) { -// // 获得日志级别 -// String strLevel = properties.getProperty(key, "info"); -// LogLevel level = LogLevel.valueOf(strLevel.toUpperCase()); -// // 设置日志级别到 LoggingSystem 中 -// loggingSystem.setLogLevel(key.replace(LOGGER_TAG, ""), level); -// } -// } -// } + @ApolloConfig + private Config config; + + @ApolloConfigChangeListener + public void onChange(ConfigChangeEvent changeEvent) throws Exception { + // 获得 Apollo 所有配置项 + Set keys = config.getPropertyNames(); + // 遍历配置集的每个配置项,判断是否是 logging.level 配置项 + for (String key : keys) { + // 如果是 logging.level 配置项,则设置其对应的日志级别 + if (key.startsWith(LOGGER_TAG)) { + // 获得日志级别 + String strLevel = config.getProperty(key, "info"); + LogLevel level = LogLevel.valueOf(strLevel.toUpperCase()); + // 设置日志级别到 LoggingSystem 中 + loggingSystem.setLogLevel(key.replace(LOGGER_TAG, ""), level); + } + } + } }