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.xdnf.cn/news/143249.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第413题等差数列划分

题目&#xff1a; 题解&#xff1a; func numberOfArithmeticSlices(nums []int) (ans int) {n : len(nums)if n 1 {return}d, t : nums[0]-nums[1], 0// 因为等差数列的长度至少为 3&#xff0c;所以可以从 i2 开始枚举for i : 2; i < n; i {if nums[i-1]-nums[i] d {t}…

java四种内置线程池介绍

目录 java线程池概述Executor接口ExecutorService接口 工具类快速创建线程池FixedThreadPoolSingleThreadExecutorCachedThreadPoolScheduledThreadPool内置线程池总结 java线程池概述 Executor框架是Java提供的一个用于处理并发任务的工具。它简化了线程管理&#xff0c;提供…

用Python实现时间序列模型实战——Day 24: 时间序列中的贝叶斯方法

一、学习内容 1. 贝叶斯时间序列分析的基本概念 贝叶斯方法基于贝叶斯统计&#xff0c;通过对数据的先验分布和似然函数进行推断&#xff0c;更新为后验分布。贝叶斯时间序列分析使用贝叶斯推断处理时间序列中的不确定性&#xff0c;适合处理复杂、不确定性高的时间序列问题。…

【RabbitMQ】可靠性传输

概述 作为消息中间件来说&#xff0c;最重要的任务就是收发消息。因此我们在收发消息的过程中&#xff0c;就要考虑消息是否会丢失的问题。结果是必然的&#xff0c;假设我们没有采取任何措施&#xff0c;那么消息一定会丢失。对于一些不那么重要的业务来说&#xff0c;消息丢失…

中秋佳节,月圆人团圆

文章目录 历史和文化起源与演变文化内涵习俗与活动 军事中秋节的军事背景中秋节的军事象征现代军营中的中秋节 月圆之夜&#xff0c;共赏婵娟传统文化&#xff0c;薪火相传团圆时刻&#xff0c;温馨满溢展望未来&#xff0c;祈愿美好 在这个金秋送爽、丹桂飘香的季节里&#xf…

web基础—dvwa靶场(五)File Upload

File Upload(文件上传) 上传的文件对 web 应用程序来说是一个巨大的风险&#xff0c;许多攻击的第一步是上传攻击代码到被攻击的系统上&#xff0c;然后攻击者只需要找到方法来执行代码即可完成攻击。也就是是说&#xff0c;文件上传是攻击者需要完成的第一步。 不受限制的文件…

Java或者前端 实现中文排序(调API的Demo)

目录 前言1. 前端2. Java 前言 前端 Vue 中的中文排序通常使用 JavaScript 提供的 localeCompare 方法来比较中文字符串 Java 后端可以使用 Collator 类来实现中文排序 1. 前端 在 Vue 中&#xff0c;使用 localeCompare 来实现中文字符串的排序&#xff1a; <template&…

如何在webots中搭建一个履带机器人

前期准备 下载webotswebots基本知识 a. 官方文档:Webots documentation: Track b. B站教程:webots-超详细入门教程(2020)_哔哩哔哩_bilibili搭建流程 搭建履带机器人主要使用到了webots中的track节点,这个节点是专门用来定义履带的相关属性,模拟履带运动的 首先,创建一个…

软考高级:嵌入式-嵌入式实时操作系统调度算法 AI 解读

讲解 嵌入式实时操作系统中的调度算法主要用于管理任务的执行顺序&#xff0c;以确保任务能够在规定时间内完成。针对你提到的几种调度算法&#xff0c;我会逐一进行通俗解释。 生活化例子 假设你在家里举办一个家庭聚会&#xff0c;家里人轮流使用一个游戏机玩游戏。你作为…

实例讲解使用Matlab_Simulink整车模型进行车速控制策略仿真测试验证方法

在进行VCU软件开发过程中&#xff0c;经常要设置一些扭矩控制相关的参数&#xff0c;一般可以通过经验先设置一版参数&#xff0c;然后通过与整车模型的联合仿真及实车标定优化相关参数&#xff0c;最终得到一版综合性能最优的参数作为最终程序定版参数。本文通过蠕行扭矩控制模…

C++八股文之STL篇

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 思维导图链接&#xff1a;STL 持续更新中…… &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64…

[Python]一、Python基础编程

F:\BaiduNetdiskDownload\2023人工智能开发学习路线图\1、人工智能开发入门\1、零基础Python编程 1. Python简介 Python优点: 学习成本低开源适应人群广泛应用领域广泛1.1 Python解释器 下载地址:Download Python | Python.org 1.2 Python开发IDE -- Pycharm 2. 基础语法…

数据权限的设计与实现系列9——前端筛选器组件Everright-filter集成框架开发2

功能实现 ‍ 规则转换为 SQL 片段‍ 规则解析 首先我们来构造一个典型的规则&#xff0c;包括两个条件组&#xff0c;每个组由两个条件组成&#xff0c;由且与或两种逻辑关系&#xff0c;如下图&#xff1a; 然后看看生成的规则&#xff0c;如下&#xff1a; {"filt…

合宙Air201模组LuatOS:PWRKEY控制,一键解决解决关机难问题

不知不觉间&#xff0c;我们已经发布拉期课程&#xff1a;hello world初体验&#xff0c;点灯、远程控制、定位和扩展功能&#xff0c;你学的怎么样&#xff1f;很多伙伴表示已经有点上瘾啦&#xff01;合宙Air201&#xff0c;如同我们一路升级打怪的得力法器&#xff0c;让开发…

计算机的错误计算(九十六)

摘要 探讨 的计算精度问题。 计算机的错误计算&#xff08;五十五&#xff09;与&#xff08;七十八&#xff09;分别列出了 IEEE 754-2019 中的一些函数与运算。下面再截图给出其另外3个运算。 例1. 已知 x-0.9999999999966 . 计算 不妨在Python下计算&#xff0c;则有&am…

10 - UDP实验

在本章节中&#xff0c;我们将采用 network 与 socket 这两个第三方库来构建UDP网络连接的功能。具体而言&#xff0c;network 库将被应用于WiFi连接的建立&#xff0c;而 socket 库则基于 lwIP 协议栈来实现网络协议的连接。在实验环节&#xff0c;我们将利用 ESP32 开发板与远…

【自动驾驶】决策规划算法(一)决策规划仿真平台搭建 | Matlab + Prescan + Carsim 联合仿真基本操作

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

FL Studio 24.1.1.4285中文完整版新功能介绍及百度网盘下载

‌FL Studio 24‌版本引入了多项新功能和改进&#xff0c;旨在提升用户体验和工作效率&#xff0c;同时保持其强大的功能和灵活性。以下是一些主要的新功能&#xff1a; ‌CLAP插件支持‌&#xff1a;FL Studio 24支持Clever Audio Plug-in (CLAP)插件&#xff0c;这扩展了软件…

认知小文3《打破桎梏,编程与人生的基本法则》

内容摘要&#xff1a; 面对挑战&#xff0c;编程起步艰难但必经磨砺。每周深耕Python&#xff0c;实战项目巩固技能。财务需努力与实战结合&#xff0c;构建坚实基础。规划先行&#xff0c;先进知识助力专家之路。认知升级阅读与多元资源&#xff0c;拓宽视野。价值积累靠专业证…

25届校招IQCAT思维能力自适应测验智鼎测评指南:题库获取、刷题策略与真题解析!

IQCAT思维能力自适应测验考试内容介绍 IOCAT思维能力自适应测验基于二因素智力理论&#xff0c;通过考察作答者的一般认知能力&#xff0c;预测其学习新知识、新技能以及理解、解决问题时的工作表现。IQCAT使用自适应测验技术&#xff0c;根据作答者的作答情况&#xff0c;从题…