当前位置: 首页 > news >正文

OpenFeign接口调用日志

一、介绍

在开发或测试环境中,需要更多的调试信息;在通过 Spring Cloud OpenFeign 调用远程服务的接口时,可能需要记录接口调用的日志详情,比如:请求头、请求参数、响应等。

Spring Cloud OpenFeign 打印 FeignClient 的接口调用日志,可以通过 配置OpenFeign日志级别 来实现。OpenFeign 提供了不同的日志级别来控制日志输出的详细程度。

请注意:需要同时配置 应用日志级别DEBUG ,OpenFeign的接口调用日志才能正常打印。

二、接口日志示例

OpenFeign 打印接口调用日志示例(FULL日志级别):

在这里插入图片描述

三、OpenFeign日志级别

OpenFeign 支持四种日志级别,分别是:

  1. NONE:不记录任何日志(默认值)。
  2. BASIC:仅记录请求方法和URL以及响应状态码和执行时间。
  3. HEADERS:除了 BASIC 级别的信息,还会记录请求和响应的头信息。
  4. FULL:最详细的日志级别,会记录请求和响应的头信息、正文和元数据。

四、配置文件

配置示例

可以通过配置文件(如 application.propertiesapplication.yml)来设置 OpenFeign 的日志级别和应用的日志级别。

spring:cloud:openfeign:client:config:default:loggerLevel: FULLlogging:level:com.example.hello_feign_client.feign.client: debug
#    com.example.hello_feign_client.feign.client.UserFeignClient: debug

配置分析

OpenFeign 日志级别配置

spring:cloud:openfeign:client:config:default:loggerLevel: FULL

这部分配置指定了默认情况下 OpenFeign 客户端的日志记录级别。loggerLevel 设置为 FULL 意味着将记录完整的请求和响应细节,包括 headers 和 body。

应用日志级别设置

logging:level:com.example.hello_feign_client.feign.client: debug
#    com.example.hello_feign_client.feign.client.UserFeignClient: debug

这部分配置是针对应用的日志记录级别的设置。这里设置了包 com.example.hello_feign_client.feign.client 下的所有类的日志级别为 debug。注释掉的那一行是为特定的 Feign 客户端 UserFeignClient 设置日志级别为 debug。如果需要为特定的 Feign 客户端设置日志级别,可以取消注释并进行相应的设置。

debug 级别意味着将记录详细的调试信息,这对于开发阶段的错误排查非常有用。

需要注意的是,Spring Cloud OpenFeign 的 loggerLevel 和日志框架(如 Logback, Log4j)的日志级别是分开的。前者控制 OpenFeign 如何记录其内部的调用细节,而后者则控制整个应用程序的日志输出级别。两者可以同时配置以达到更精细的日志管理。

五、全局默认和指定服务

全局默认

在 Spring Cloud OpenFeign 的配置中,default 是一个特殊的配置项名称,用来指定全局默认的配置选项。当您配置了一个名为 default 的项时,它会应用于所有未单独配置的 Feign 客户端。

具体来说,在以下配置中:

spring:cloud:openfeign:client:config:default:loggerLevel: FULL

default 项内的配置(在这个例子中是 loggerLevel: FULL)会被应用到所有没有显式指定配置的 Feign 客户端上。这意味着,如果您没有为某个特定的 Feign 客户端提供单独的日志级别配置,那么这个客户端将会使用 FULL 级别的日志记录。

指定服务

如果您有多个 Feign 客户端,并且想要为它们中的某些客户端指定不同的配置,您可以为这些特定的客户端提供独立的配置项,而不必使用 default。例如:

spring:cloud:openfeign:client:config:hello-feign-server:loggerLevel: BASICroleFeignClient:loggerLevel: HEADERSdefault:loggerLevel: FULL

在这个例子中,hello-feign-server 具有自己的日志级别配置,而任何其他未单独配置的 Feign 客户端都会使用 FULL 日志级别。这样就可以灵活地根据每个客户端的需求来调整配置。

在 Spring Cloud 的上下文中,hello-feign-server 是用来标识一个具体的 Feign 客户端的名称。当您创建一个 Feign 客户端时,您会通过 @FeignClient 注解来指定一个名称。例如:

@FeignClient(name = "hello-feign-server")
public interface UserFeignClient {// 定义方法...
}

在这个例子中,hello-feign-server 就是 Feign 客户端的名字,它可以在配置文件中作为键来指定该客户端的具体配置。

如果 FeignClient 配置了 contextId,此时 客户端名称 就不再是 服务名(name),而是 contextId 的值。

@FeignClient(contextId = "roleFeignClient", name = "hello-feign-server", path = "/roles")
public interface RoleFeignClient {// 定义方法...
}

六、不同级别日志的示例

在这里插入图片描述

七、代码配置OpenFeign日志级别(不推荐)

实现方式:

package com.example.hello_feign_client.feign.config;import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FeignLogConfig {@BeanLogger.Level feignLoggerLeave() {return Logger.Level.FULL;}}

使用 Java 配置来设置 OpenFeign 的日志级别(如示例代码所示)虽然可行,但它并不是最推荐的方式,主要原因如下:

  1. 配置分离

    • 应用配置通常应该与业务逻辑分离。使用配置文件(如 application.propertiesapplication.yml)来管理配置信息更加灵活,易于维护,并且可以在不重新编译或不修改代码的情况下更改配置。
  2. 环境敏感性

    • 不同的环境可能需要不同的日志级别设置。例如,在生产环境中,您可能希望减少日志输出以提高性能,而在开发或测试环境中,则可能需要更多的调试信息。配置文件允许您根据环境的不同来轻松切换这些设置,而不需要修改代码。
  3. 可读性和可维护性

    • 使用配置文件来管理日志级别可以使配置更加清晰易读。将配置放在一个集中管理的地方也有助于避免将来可能出现的配置混乱问题。

尽管如此,在某些情况下,使用 Java 配置仍然是有效的解决方案,特别是在需要动态改变配置或者配置逻辑比较复杂的时候。但是,对于像设置日志级别这样相对简单和静态的配置,还是建议使用配置文件的方式。这不仅符合 Spring Boot 的最佳实践,也能更好地支持 DevOps 流程中的配置管理。


http://www.mrgr.cn/news/29324.html

相关文章:

  • 冒泡选择法(c基础)
  • 两个链表求并集、交集、差集
  • 微信小程序=》基础=》常见问题=》性能总结
  • 【Hadoop实训】Hive 数据操作②
  • Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】
  • Chromium 中chrome.system.display扩展接口定义c++
  • WordPress建站钩子函数及使用
  • 2024/9/18 英语每日一段
  • 探索iPhone一键删除重复照片的方法
  • 【STM32系统】基于STM32设计的DAC输出电压与ADC检测电压系统(简易万用表,检测电压电流)——文末工程资料下载
  • 阻止冒泡事件
  • Qt开发技巧(四)“tr“使用,时间类使用,Qt容器取值,类对象的删除,QPainter画家类,QString的转换,用好 QVariant类型
  • PDF标准详解(五)——图形状态
  • uniapp开发微信小程序时, 如何跳转官方的用户服务协议
  • 上架google 提示 base模块超出200MB限制?
  • 这几个电脑文件加密的方法你都知道吗?
  • 【C++】透析string类
  • 创客中国AIGC专题赛冠军天鹜科技:AI蛋白质设计引领者
  • 开源即时通讯IM框架MobileIMSDK的H5端技术概览
  • DTMF2str集成工具
  • Docker 和 containerd 的性能对比
  • 【运维项目经历|044】云迁移与CI/CD管道优化项目
  • 便携式气象监测站的工作原理
  • MySQL函数:日期函数
  • 服务器管理:从零开始的服务器安装与配置指南
  • SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(上)