携程 Apollo 配置中心 | 学习笔记(十三)| 如何将日志配置文件放入到Apollo配置中心并支持热更新?

本章将介绍如何将日志配置文件放入到Apollo配置中心并支持热更新

专栏目录:

携程 Apollo 配置中心 | 学习笔记 序章

欢迎关注个人公众号:  Coder编程

欢迎关注个人网站:www.52melrin.com


需求

     日志模块是每个项目中必须的,用来记录程序运行中的相关信息。一般在开发环境下使用DEBUG级别的日志输出,为了方便查看问题,而在线上一般都使用INFO或者ERROR级别的日志,主要记录业务操作或者错误的日志。那么问题来了,当线上环境出现问题希望输出DEBUG日志信息辅助排查的时候怎么办呢?修改配置文件,重新打包然后上传重启线上环境,之前确实是这么做的。

     接下来将介绍如何通过将日志文件部署到Apollo配置中心,并支持对日志等级的修改达到热更新。这里日志等级包括对单个类日志文件等级的支持、不同环境日志等级的支持。


版本

      Apollo: 0.10.2

      SpringBoot: 2.0.3.RELEASE


单个类日志文件等级更改

场景:当我们发现定位到某个类中可能出现相关问题,需要进行问题排查时。可以单独指定对单独类,根据自己做的日志记录。进行日志等级的更改并支持热更新。

监听日志文件变化

@Service
public class LoggerConfiguration {
  private static final Logger logger = LoggerFactory.getLogger(LoggerConfiguration.class);
  private static final String LOGGER_TAG = "logging.level.";
  
  @Autowired
  private LoggingSystem loggingSystem;

  @ApolloConfig
  private Config config;

  @ApolloConfigChangeListener
  private void configChangeListter(ConfigChangeEvent changeEvent) {
    refreshLoggingLevels();
  }

  @PostConstruct
  private void refreshLoggingLevels() {
    Set<String> keyNames = config.getPropertyNames();
    for (String key : keyNames) {
      if (containsIgnoreCase(key, LOGGER_TAG)) {
        String strLevel = config.getProperty(key, "info");
        LogLevel level = LogLevel.valueOf(strLevel.toUpperCase());
        loggingSystem.setLogLevel(key.replace(LOGGER_TAG, ""), level);
        logger.info("{}:{}", key, strLevel);
      }
    }
  }

  private static boolean containsIgnoreCase(String str, String searchStr) {
    if (str == null || searchStr == null) {
      return false;
    }
    int len = searchStr.length();
    int max = str.length() - len;
    for (int i = 0; i <= max; i++) {
      if (str.regionMatches(true, i, searchStr, 0, len)) {
        return true;
      }
    }
    return false;
  }
}

测试类

@RestController
public class LoggerTestController {
    private static Logger logger = LoggerFactory.getLogger(LoggerTestController.class);
    
    @RequestMapping(value = "/hello")
    public String hello() {
        logger.info("info--------------");
        logger.error("error--------------");
        logger.warn("warn--------------");
        logger.debug("debug--------------");
        return "Hello,World";
    }
}

场景验证

当我们启动完项目,发现定位到LoggerTestController这个类中的hello方法有问题。这时候我们需要调整日志等级。

1.项目已经启动好了,发现LoggerTestController有问题



可以看到项目已经启动,部署完毕的状态。

这里,为了验证先访问:http://localhost:8099/hello 请求,控制台输出的是:


1.拷贝LoggerTestController全类路径,在签名加上logging.level.

这里我的LoggerTestController全类路径是:com.spring.boot.logger.controller.LoggerTestController

加上后的key : logging.level.com.spring.boot.logger.controller.LoggerTestController

把key部署到Apollo配置中心,value等级设置为warn


在不重启服务的情况下,再次访问http://localhost:8099/hello,控制台输出:

可以看到监听事件,以及日志等级的变成了warn等级。

继续更改等级为error,可以看到日志等级变成error等级了。这里就不再放图了。


不同环境日志等级更改

场景:从上面场景可以看出是开发人员自己定义加入的日志,下面的场景是对整个环境日志等级的更改。例如:Spring环境日志等级的更改 

logging.level.org.springframework = debug

沿用上面的类文件进行验证

在不重启项目的情况下,在Apollo配置中心中加入

Key =logging.level.org.springframework

Value= debug

再次访问http://localhost:8099/hello,查看控制台输出:


这时候可以看出日志多了许多。


场景验证结束,由此已经完成了将日志配置文件放入到Apollo配置中心并支持热更新。




  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值