
离线 TA的专栏
- 打卡等级:热心大叔
- 打卡总天数:203
- 打卡月天数:0
- 打卡总奖励:2987
- 最近打卡:2023-08-27 06:08:03
|
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-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请求日志统一打印
- @Slf4j
- public 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));
- }
- }
- }
复制代码以上为个人经验,希望能给大家一个参考,也希望大家多多支持晓枫资讯。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:  进行删除处理。
4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
|