feign如何打印出http请求

网友投稿 313 2022-07-22


目录feign打印出http请求1.记录请求和响应的头文件2.在配置文件中配置对应的包feign请求日志统一打印

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":http://"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> 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 logMap = new HashMap<>(3);

logMap.put(PATH, request.url());

iKztSVNqN 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 Rehttp://sponse logAndRebufferResponse(

String configKey, Level logLevel, Response response, long elapsedTime) throws IOException {

Map 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 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));

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解MybatisPlus中@Version注解的使用
下一篇:SpringBoot项目使用 axis 调用webservice接口的实践记录
相关文章

 发表评论

暂时没有评论,来抢沙发吧~