文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

feign怎么打印出http请求

2023-07-02 10:21

关注

这篇文章主要讲解了“feign怎么打印出http请求”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“feign怎么打印出http请求”吧!

feign打印出http请求

用openfign依赖需要将请求的方法中的http请求打印出来

需要做如下两步:

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

正文和元数据的日志,需要在配置文件指出需要打印日志的类

 @Bean    Logger.Level feignLoggerLevel() {        return Logger.Level.FULL;    }

2.在配置文件中配置对应的包

logging:  level:    com.report.service.analysis.fegin.AdminServiceClient: debug

这样就会生效了,如下:

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-alive
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] content-type: application/json
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] date: Thu, 14 Jan 2021 02:57:34 GMT
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] server: nginx/1.19.0
2021-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: chunked
2021-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-Encoding
2021-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请求日志统一打印

@Slf4jpublic class FeignLogger extends feign.Logger {    static ThreadLocal<Map<String, String>> logContext = new ThreadLocal();    static String PATH = "path";    static String METHOD = "method";    static String REQUEST_BODY = "body";    static String ELAPSED_TIME = "耗时";    static String ELAPSED_TIME_UNIT = "毫秒";    static String FEIGN_INVOKE_LOGGER = "feign 接口调用";    @Override    protected void logRequest(String configKey, Level logLevel, Request request) {        Map<String, String> logMap = new HashMap<>(3);        logMap.put(PATH, request.url());        logMap.put(METHOD, request.method());        logMap.put(REQUEST_BODY, request.body() == null ? null :                request.charset() == null ? null : new String(request.body(), request.charset()));        logContext.set(logMap);    }    @Override    protected Response logAndRebufferResponse(            String configKey, Level logLevel, Response response, long elapsedTime) throws IOException {        Map<String, String> requetParam = logContext.get();        StringBuilder stringBuilder = new StringBuilder();        stringBuilder                .append(FEIGN_INVOKE_LOGGER).append(" ")                .append(requetParam.get(METHOD)).append(" ")                .append(response.status()).append(" ")                .append(requetParam.get(PATH)).append(" ")                .append(ELAPSED_TIME).append(elapsedTime).append(ELAPSED_TIME_UNIT);        if (requetParam.get(REQUEST_BODY) != null) {            stringBuilder.append(" 请求入参:").append(requetParam.get(REQUEST_BODY));        }        logContext.remove();        // 返回参数        if (response.body() != null && !(response.status() == 204 || response.status() == 205)) {            byte[] bodyData = Util.toByteArray(response.body().asInputStream());            if (bodyData.length > 0) {                String responseBody = decodeOrDefault(bodyData, UTF_8, "Binary data");                stringBuilder                        .append(" 返回值:")                        .append(responseBody.replaceAll("\\s*|\t|\r|\n", ""));            }            log.info(stringBuilder.toString());            return response.toBuilder().body(bodyData).build();        }        log.info(stringBuilder.toString());        return response;    }    protected IOException logIOException(String configKey, Level logLevel, IOException ioe, long elapsedTime) {        Map<String, String> requetParam = logContext.get();        StringBuilder stringBuilder = new StringBuilder();        stringBuilder                .append(FEIGN_INVOKE_LOGGER).append(" ")                .append(requetParam.get(METHOD)).append(" ")                .append(ioe.getClass().getSimpleName()).append(" ")                .append(requetParam.get(PATH)).append(" ")                .append(ELAPSED_TIME).append(elapsedTime).append(ELAPSED_TIME_UNIT);;        if (requetParam.get(REQUEST_BODY) != null) {            stringBuilder.append(" 请求入参:").append(requetParam.get(REQUEST_BODY));        }        log.warn(stringBuilder.toString());        logContext.remove();        return ioe;    }    @Override    protected void log(String configKey, String format, Object... args) {        if (log.isInfoEnabled()) {            log.info(String.format(methodTag(configKey) + format, args));        }    }}

感谢各位的阅读,以上就是“feign怎么打印出http请求”的内容了,经过本文的学习后,相信大家对feign怎么打印出http请求这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯