您好,登錄后才能下訂單哦!
這篇文章主要講解了“feign怎么打印出http請求”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“feign怎么打印出http請求”吧!
用openfign依賴需要將請求的方法中的http請求打印出來
需要做如下兩步:
正文和元數據的日志,需要在配置文件指出需要打印日志的類
@Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; }
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)
@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)); } } }
感謝各位的閱讀,以上就是“feign怎么打印出http請求”的內容了,經過本文的學習后,相信大家對feign怎么打印出http請求這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。