Apollo中如何实现日志级别动态设置?
实现日志级别动态配置,就是通过修改配置文件,不用启动项目就可以实时更新日志级别
我们项目中用的是Apollo配置中心
主要的思路就是:
1、在配置中心添加日志级别相关配置,要以logging.level.开头
2、代码中,监听apollo配置改变事件中要对更新的配置进行处理
ApolloConfig中:
@Autowired
private LoggingSystem loggingSystem;
@Value("${logging.level.root:warn}")
private String defaultLogLevel;
//默认日志key
public static final String DEFAULT_LOG_KEY = "logging.level.root";
//日志级别前缀
public static final String LOGGER_TAG = "logging.level.";
@ApolloConfigChangeListener
private void changeHandler(ConfigChangeEvent changeEvent){
Set<String> strings = changeEvent.changedKeys();
strings.stream().filter(str -> str.startsWith(LOGGER_TAG)).forEach(str -> {
ConfigChange change = changeEvent.getChange(str);
String strLevel = StringUtils.isBlank(change.getNewValue()) ? defaultLogLevel : change.getNewValue();
String newLevel = LogLevel.valueOf(strLevel.toUpperCase());
loggingSystem.setLogLevel(str.replace(LOGGER_TAG,""),newLevel);
});
}
如果同时设置某个类和root日志级别时,出现类上的日志级别不生效问题,参考我后面的文章:在java中,设置logging.level.root 和类的日志级别,类上的日志级别不生效