Spring Cloud Alibaba自从去年10月底宣布开源之后就备受国内开发者的关注,微服务领域的各个大佬都发文介绍了这个本土化微服务开发框架。

我也在工作之余忙里偷闲地使用了一下其中最重要的服务治理和配置组件Nacos。

什么是Nacos

为什么叫Nacos呢?我在官方群里看到许进大佬说Nacos来自于naming config service的首字母组合。摘抄一段官网https://nacos.io/zh-cn/的介绍:

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

之前学过Netfix公司的Eureka组件的同学应该很容易理解这个Nacos的作用,在此就不细讲了,有兴趣的同学可以上官网仔细阅读相关文档。

Nacos怎么实现日志级别的动态刷新?

Nacos为Spring、Spring Boot、Spring Cloud项目分别提供了不同的依赖,这里我使用了Spring Cloud项目作为演示。

前提条件

先下载 Nacos 并启动 Nacos server。操作步骤参见 Nacos 快速入门

1. 创建Spring Cloud项目

大家对创建Spring Boot项目一定比较熟悉,那么怎么创建一个Spring Cloud项目呢?我用了一个比较通用的方法,其实和创建Spring Boot项目类似,都是在idea中选择spring initializr,然后选择自己想要引入的包。这里我们只需要选择引入Cloud Bootstrap这个包就可以创建Spring Cloud项目了

创建Spring Cloud项目

2. 添加依赖

首先是nacos-config的依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>${latest.version}</version>
</dependency>

这个版本可以去maven的中央仓库https://mvnrepository.com找最新的版本号。

其次我还引入了一个打log大法好工具,lombok

<dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
</dependency>
3. 在bootstrap.properties (注意,不是application.properties)中配置 Nacos server 的地址和应用名
spring.application.name=config-client
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
logging.level.top.chuckfang.nacosconfigclient=info

这最后一个就是配置日志级别的。我们的目标就是通过Nacos的动态配置功能使我们这个配置项动态的改变。

4. 向外界暴露一个接口,在控制台输出日志
@RestController
@RequestMapping("/config")
@RefreshScope
@Slf4j
public class ConfigController {
    @GetMapping("/log")
    public void log(){
        log.error("这是一条error");
        log.warn("这是一条warn");
        log.info("这是一条info");
        log.debug("这是一条debug");
    }
}
5. 进入Nacos管理界面,手动添加一条配置项

新建配置

按下发布就可以控制日志输出的级别了,是不是很简单!

我们看看效果

当在Nacos把日志输出级别设为info的时候,控制台输出为

输出1

当在Nacos把日志输出级别设为error并重新发布的时候,控制台输出为

输出2

我们发现控制台把改变的配置项直接输出了,另外输出的log也只有error级别的,实现了我们动态改变配置的功能。

详细代码请看https://github.com/fkccoding/nacos-config-client



技术分享     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!