整合 Sleuth 编码实践

在微服务架构项目中整合 Sleuth 的具体步骤如下。

第一步,开启 OpenFeign 的日志输出功能。

为了增强后续功能演示的效果,需要开启 OpenFeign 的日志输出功能,这样就能够把 OpenFeign 远程调用接口的日志内容打印出来。

newbee-mall-cloud-recommend-webnewbee-mall-cloud-order-webnewbee-mall-cloud-shop-cart-webnewbee-mall-cloud-goods-web 4 个微服务实例工程中的 config 包下新增 OpenFeignConfiguration 类,用于设置 OpenFeign 的日志级别,代码如下:

@Configuration
public class OpenFeignConfiguration {
    @Bean
    public Logger.Level openFeignLogLevel() {
        // 设置 OpenFeign 的日志级别
        return Logger.Level.FULL;
    }
}

因为用户微服务并不会通过 OpenFeign 调用其他微服务,所以这里不需要在 newbee-mall-cloud-user-web 工程中添加这个配置类。

第二步,在配置文件中增加关于日志输出的配置。

修改 newbee-mall-cloud-user-webnewbee-mall-cloud-recommend-webnewbee-mall-cloud-order-webnewbee-mall-cloud-shop-cart-webnewbee-mall-cloud-goods-web 5 个微服务实例工程中的 application.properties 文件,设置日志输出的相关配置,分别新增如下配置项。

newbee-mall-cloud-user-web:

# 演示需要,开启当前项目中的 debug 级别日志
logging.level.ltd.user.cloud.newbee-debug

日志输出级别为 debug,即 debuginfoerror 级别的日志都会被输出。

newbee-mall-cloud-recommend-web:

# 演示需要,开启 OpenFeign 和当前项目中的 debug 级别日志
logging.level.ltd.user.cloud.newbee.openfeign=debug
logging.level.ltd.goods.cloud.newbee.openfeign=debug
logging.level.ltd.recommend.cloud.newbee=debug

由于订单微服务会通过 OpenFeign 调用购物车微服务、用户微服务和商品微服务,因此不仅设置了订单微服务工程包目录下的日志输出级别,还设置了 OpenFeign 的日志输出级别,与 OpenFeign 相关的日志也会被输出。

另外,读者需要注意这里的包名配置。logging.level.ltd.order.cloud.newbee=debug 配置的是订单微服务工程下的包,其他 3 行配置项分别是用户微服务、商品微服务和购物车微服务 OpenFeign 包下的配置,因为订单微服务在 pom.xml 文件中引入了相关的api依赖,所以要想输出订单微服务通过 OpenFeign 调用购物车微服务、商品微服务和用户微服务时的日志,这3行日志就是必须加上的,注意包名设置分别是购物车微服务、用户微服务和商品微服务 3 个工程下的包名配置,即 logging.level.ltd.shopcart.cloud.newbee.openfeignltd.user.cloud.newbee.openfeignltd.goods.cloud.newbee.openfeign,而不是订单微服务工程下的包名配置 ltd.order.cloud.newbee

newbee-mall-cloud-goods-web:

# 演示需要,开启 OpenFeign 和当前项目中的 debug 级别日志
logging.level.ltd.user.cloud.newbee.openfeign=debug
logging.level.ltd.goods.cloud.newbee=debug

由于推荐微服务会通过 OpenFeign 调用用户微服务,因此不仅设置了商品微服务工程包目录下的日志输出级别,还设置了 OpenFeign 的日志输出级别,与 OpenFeign 相关的日志也会被输出,读者需要注意这里的包名设置。

newbee-mall-cloud-shop-cart-web:

# 演示需要,开启 OpenFeign 和当前项目中的 debug 级别日志
logging.level.ltd.user.cloud.newbee.openfeign=debug
logging.level.ltd.goods.cloud.newbee.openfeign=debug
logging.level.ltd.shopcart.cloud.newbee=debug

由于购物车微服务会通过 OpenFeign 调用用户微服务和商品微服务,因此不仅设置了购物车微服务工程包目录下的日志输出级别,还设置了 OpenFeign 的日志输出级别,与 OpenFeign 相关的日志也会被输出,读者需要注意这里的包名设置。

第三步,引入 Sleuth 依赖。

依次打开 newbee-mall-cloud-user-webnewbee-mall-cloud-recommend-webnewbee-mall-cloud-order-webnewbee-mall-cloud-shop-cart-webnewbee-mall-cloud-goods-web 5 个微服务实例工程中的 pom.xml 文件,在 dependencies 节点下新增 Spring CloudSleuth 的依赖项,配置如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

之后,启动 5 个微服务实例工程,此时控制台上输出的日志信息就变了。在这里,笔者通过推荐微服务的 Swagger UI 页面调用了首页接口,控制台中输出的日志内容如下,包括基础的日志信息、MyBatis 执行的日志信息及 OpenFeign 调用时的日志信息。

推荐微服务实例中输出的日志信息:

image 2025 04 28 15 07 10 300

商品微服务实例中输出的日志信息:

image 2025 04 28 15 07 36 060

因篇幅有限,这里只给出了部分日志。读者可自行测试在调用其他功能时会输出哪些日志。微服务架构项目中整合 Spring Cloud Seluth 完成。

另外,当前的日志配置级别为 debug,级别很低,因此输出的日志是非常丰富的,在开发环境、测试环境或 beta 环境中可以使用,在生产环境中一般不建议输出如此丰富的日志信息,可以适当调高级别。