设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间21 现在时间21 缓存数据 青春之所以让人留念,是因为我们年轻时干的蠢事大都妙不可言。晚安!

青春之所以让人留念,是因为我们年轻时干的蠢事大都妙不可言。晚安!

查看: 907|回复: 3

feign如何打印出http请求

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:203
  • 打卡月天数:0
  • 打卡总奖励:2987
  • 最近打卡:2023-08-27 06:08:03
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
396
主题
371
精华
0
金钱
4142
积分
781
注册时间
2022-12-27
最后登录
2025-6-1

发表于 2023-2-17 12:52:47 | 显示全部楼层 |阅读模式
feign打印出http请求

用openfign依赖需要将请求的方法中的http请求打印出来
需要做如下两步:

1.记录请求和响应的头文件

正文和元数据的日志,需要在配置文件指出需要打印日志的类
  1.  @Bean
  2.     Logger.Level feignLoggerLevel() {
  3.         return Logger.Level.FULL;
  4.     }
复制代码
2.在配置文件中配置对应的包
  1. logging:
  2.   level:
  3.     com.report.service.analysis.fegin.AdminServiceClient: debug
复制代码
这样就会生效了,如下:
  1. ms] ---> END HTTP (0-byte body)2021-01-14 10:57:34.525 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] <--- HTTP/1.1 200 (98ms)2021-01-14 10:57:34.525 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] connection: keep-alive2021-01-14 10:57:34.525 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] content-type: application/json2021-01-14 10:57:34.525 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] date: Thu, 14 Jan 2021 02:57:34 GMT2021-01-14 10:57:34.525 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] server: nginx/1.19.02021-01-14 10:57:34.526 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - ServiceClient#getDealerItemListByParams] transfer-encoding: chunked2021-01-14 10:57:34.526 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] vary: Accept-Encoding2021-01-14 10:57:34.526 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] 2021-01-14 10:57:34.528 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] {"code":"000000","description":"SUCCESS","data":2021-01-14 10:57:34.528 [http-nio-8080-exec-1] DEBUG c.n.s.r.service.analysis.fegin.AdminServiceClient - TID: N/A - [ServiceClient#getDealerItemListByParams] <--- END HTTP (2692-byte body)
复制代码
feign请求日志统一打印
  1. @Slf4j
  2. public class FeignLogger extends feign.Logger {
  3.     static ThreadLocal<Map<String, String>> logContext = new ThreadLocal();
  4.     static String PATH = "path";
  5.     static String METHOD = "method";
  6.     static String REQUEST_BODY = "body";
  7.     static String ELAPSED_TIME = "耗时";
  8.     static String ELAPSED_TIME_UNIT = "毫秒";
  9.     static String FEIGN_INVOKE_LOGGER = "feign 接口调用";
  10.     @Override
  11.     protected void logRequest(String configKey, Level logLevel, Request request) {
  12.         Map<String, String> logMap = new HashMap<>(3);
  13.         logMap.put(PATH, request.url());
  14.         logMap.put(METHOD, request.method());
  15.         logMap.put(REQUEST_BODY, request.body() == null ? null :
  16.                 request.charset() == null ? null : new String(request.body(), request.charset()));
  17.         logContext.set(logMap);
  18.     }
  19.     @Override
  20.     protected Response logAndRebufferResponse(
  21.             String configKey, Level logLevel, Response response, long elapsedTime) throws IOException {
  22.         Map<String, String> requetParam = logContext.get();
  23.         StringBuilder stringBuilder = new StringBuilder();
  24.         stringBuilder
  25.                 .append(FEIGN_INVOKE_LOGGER).append(" ")
  26.                 .append(requetParam.get(METHOD)).append(" ")
  27.                 .append(response.status()).append(" ")
  28.                 .append(requetParam.get(PATH)).append(" ")
  29.                 .append(ELAPSED_TIME).append(elapsedTime).append(ELAPSED_TIME_UNIT);
  30.         if (requetParam.get(REQUEST_BODY) != null) {
  31.             stringBuilder.append(" 请求入参:").append(requetParam.get(REQUEST_BODY));
  32.         }
  33.         logContext.remove();
  34.         // 返回参数
  35.         if (response.body() != null && !(response.status() == 204 || response.status() == 205)) {
  36.             byte[] bodyData = Util.toByteArray(response.body().asInputStream());
  37.             if (bodyData.length > 0) {
  38.                 String responseBody = decodeOrDefault(bodyData, UTF_8, "Binary data");
  39.                 stringBuilder
  40.                         .append(" 返回值:")
  41.                         .append(responseBody.replaceAll("\\s*|\t|\r|\n", ""));
  42.             }
  43.             log.info(stringBuilder.toString());
  44.             return response.toBuilder().body(bodyData).build();
  45.         }
  46.         log.info(stringBuilder.toString());
  47.         return response;
  48.     }
  49.     protected IOException logIOException(String configKey, Level logLevel, IOException ioe, long elapsedTime) {
  50.         Map<String, String> requetParam = logContext.get();
  51.         StringBuilder stringBuilder = new StringBuilder();
  52.         stringBuilder
  53.                 .append(FEIGN_INVOKE_LOGGER).append(" ")
  54.                 .append(requetParam.get(METHOD)).append(" ")
  55.                 .append(ioe.getClass().getSimpleName()).append(" ")
  56.                 .append(requetParam.get(PATH)).append(" ")
  57.                 .append(ELAPSED_TIME).append(elapsedTime).append(ELAPSED_TIME_UNIT);;
  58.         if (requetParam.get(REQUEST_BODY) != null) {
  59.             stringBuilder.append(" 请求入参:").append(requetParam.get(REQUEST_BODY));
  60.         }
  61.         log.warn(stringBuilder.toString());
  62.         logContext.remove();
  63.         return ioe;
  64.     }
  65.     @Override
  66.     protected void log(String configKey, String format, Object... args) {
  67.         if (log.isInfoEnabled()) {
  68.             log.info(String.format(methodTag(configKey) + format, args));
  69.         }
  70.     }
  71. }
复制代码
以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:8
  • 最近打卡:2024-03-15 06:01:07
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
23
积分
6
注册时间
2023-5-19
最后登录
2024-3-15

发表于 2023-11-23 01:18:38 | 显示全部楼层
谢谢分享~~~~~
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
15
积分
10
注册时间
2022-12-25
最后登录
2022-12-25

发表于 2025-2-17 07:01:10 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
12
积分
4
注册时间
2024-10-12
最后登录
2024-10-12

发表于 3 天前 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼
4楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表