日志配置接入Nacos
前段时间对项目使用的配置中心进行改造,之前使用的是百度的disconf但该项目在2016年之后就处于停滞状态,另外其没有http接口用于获取配置无法满足公司建立统一配置中心的需求,于是计划将迁移至Nacos,这里简单记录下。
目标问题
在应用配置接入Nacos后,便考虑将日志配置也接入Nacos,可能有人会认为在application.yml
中也是可以配置日志,但实际的使用中大多还是分开的,这样可以充分利用日框架的功能特性。那么如何将日志配置接入Nacos呢?
解决方案
EnvironmentPostProcessor
这里考虑使用Spring Boot
的EnvironmentPostProcessor
来进行集成,不了解的同学可以看看官网文档,这里做下简单的介绍。EnvironmentPostProcessor
作为环境配置处理机制,利用此功能我们可以在容器启动前自定义环境和ApplicationContext
,用来作为日志配置处理也算合适。
实现逻辑
实现逻辑上并不复杂,像大象装入冰箱一样分三步:
graph LR
A(创建本地配置) --> B(初始化Nacos)
B --> C(拉取Nacos配置)
本地配置
事实上一个简易的本地配置是无法避免的,这里仿照Spring Cloud
创建并读取本地bootstrap.yml
配置文件,设置一些需要用到的参数
1 | logging: |
参数主要设置了两项:
- 日志配置文件
- Nacos连接配置
在Nacos模型中,配置标识由三部分组成
- namespace
- group
- dataId
这里日志配置使用文件名作为dataId
加载本地配置
在有了一个简易的本地配置之后,就需要读取处理,这里实现一个EnvironmentPostProcessor
,具体的读取代码交由NacosStaticConfigFetcher
类来处理,详情可见gist
1 | package com.xxx.xxx.common.config; |
接着在src/main/resources/META-INF/spring.factories
文件中添加org.springframework.boot.env.EnvironmentPostProcessor=com.xxx.xxx.common.config.NacosEnvironmentPostProcessor
作为Spring Boot
读取的引导,保证配置被加载即可。
写在最后
在经过此番改造只有,便能将所有配置均放入Nacos中,同时可以利用日志配置动态加载的特性实现日志级别的动态刷新,总的来说效果还是不错的,希望这篇文章能帮到各位。