From 329e2588462677327a5ea89321a54544f544f9b2 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Thu, 28 Dec 2023 10:21:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- pom.xml | 4 +- rest-proxy-api/pom.xml | 2 +- rest-proxy-core/pom.xml | 2 +- .../rest/core/client/DefaultRestClient.java | 3 +- .../rest/registry/proxy/RestProxyInvoker.java | 5 ++ .../flyfish/rest/utils/RestLogUtils.java | 73 +++++++++++++++++++ .../src/test/resources/application.yml | 5 ++ 8 files changed, 91 insertions(+), 7 deletions(-) create mode 100644 rest-proxy-core/src/main/java/group/flyfish/rest/utils/RestLogUtils.java diff --git a/README.md b/README.md index 1df0174..e7860f5 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Rest Proxy组件是本人在长期的系统对接工作中提炼出的一个可 具体是这样的:**写一个interface,定义几个method,然后加上注解,完成!**,在业务里直接调用method即可,不需要写任何实现类! ## REST请求代理(基于Http Interface) -本组件基于SpringBoot2.7.7构建,支持完整的AutoConfiguraiton。仅需要极少量配置就可以完成配置。当前最新版本为`1.1.5`,新增了标准REST注解。 +本组件基于SpringBoot2.7.7构建,支持完整的AutoConfiguraiton。仅需要极少量配置就可以完成配置。当前最新版本为`1.1.6`,新增了标准REST注解。 ### 特性列表 - 无感知自动注入,只需interface + 注解即可轻松完成对接 @@ -29,7 +29,7 @@ Rest Proxy组件是本人在长期的系统对接工作中提炼出的一个可 group.flyfish rest-proxy-core - 1.1.5 + 1.1.6 ``` diff --git a/pom.xml b/pom.xml index 797337c..7b532f6 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ group.flyfish rest-proxy - 1.1.5 + 1.1.6 8 @@ -22,7 +22,7 @@ 1.8 4.4 2.6 - 1.1.5 + 1.1.6 pom diff --git a/rest-proxy-api/pom.xml b/rest-proxy-api/pom.xml index 1a89960..c1c9600 100644 --- a/rest-proxy-api/pom.xml +++ b/rest-proxy-api/pom.xml @@ -5,7 +5,7 @@ group.flyfish rest-proxy - 1.1.5 + 1.1.6 4.0.0 diff --git a/rest-proxy-core/pom.xml b/rest-proxy-core/pom.xml index dd00489..b5e8010 100644 --- a/rest-proxy-core/pom.xml +++ b/rest-proxy-core/pom.xml @@ -5,7 +5,7 @@ group.flyfish rest-proxy - 1.1.5 + 1.1.6 4.0.0 diff --git a/rest-proxy-core/src/main/java/group/flyfish/rest/core/client/DefaultRestClient.java b/rest-proxy-core/src/main/java/group/flyfish/rest/core/client/DefaultRestClient.java index 9507df4..3fae245 100644 --- a/rest-proxy-core/src/main/java/group/flyfish/rest/core/client/DefaultRestClient.java +++ b/rest-proxy-core/src/main/java/group/flyfish/rest/core/client/DefaultRestClient.java @@ -8,6 +8,7 @@ import group.flyfish.rest.core.factory.HttpClientFactoryBean; import group.flyfish.rest.core.factory.HttpClientProvider; import group.flyfish.rest.enums.ResponseType; import group.flyfish.rest.utils.JacksonUtil; +import group.flyfish.rest.utils.RestLogUtils; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpEntity; import org.apache.http.StatusLine; @@ -272,8 +273,8 @@ final class DefaultRestClient extends RestErrorHandler implements RestClient { * @return 结果 */ private T innerExecute() throws IOException { - log.info("【Rest Invoke】{} {}", request.getMethod(), request.getURI()); try (CloseableHttpResponse response = clientProvider.getClient().execute(request)) { + RestLogUtils.log(response); StatusLine statusLine = response.getStatusLine(); HttpEntity entity = response.getEntity(); if (HttpStatus.valueOf(statusLine.getStatusCode()).isError()) { diff --git a/rest-proxy-core/src/main/java/group/flyfish/rest/registry/proxy/RestProxyInvoker.java b/rest-proxy-core/src/main/java/group/flyfish/rest/registry/proxy/RestProxyInvoker.java index ccaf08d..8cc2f87 100644 --- a/rest-proxy-core/src/main/java/group/flyfish/rest/registry/proxy/RestProxyInvoker.java +++ b/rest-proxy-core/src/main/java/group/flyfish/rest/registry/proxy/RestProxyInvoker.java @@ -17,6 +17,7 @@ import group.flyfish.rest.registry.proxy.support.UrlCompiler; import group.flyfish.rest.registry.wrapper.DefaultRestResultMapping; import group.flyfish.rest.utils.DataUtils; import group.flyfish.rest.utils.JacksonUtil; +import group.flyfish.rest.utils.RestLogUtils; import lombok.Getter; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -161,8 +162,12 @@ public class RestProxyInvoker implements InvocationHandler, PropertiesConfigurab client.setClient(registry.getProvider()); // 是否对结果进行映射 boolean map = null != mapping && !method.isBare(); + // 打印请求 + RestLogUtils.log(builder); // 执行请求 Object result = execute(client, method, map); + // 打印结果 + RestLogUtils.log(result); // 结果映射 return map ? mapping.map(result) : result; } diff --git a/rest-proxy-core/src/main/java/group/flyfish/rest/utils/RestLogUtils.java b/rest-proxy-core/src/main/java/group/flyfish/rest/utils/RestLogUtils.java new file mode 100644 index 0000000..19c6f54 --- /dev/null +++ b/rest-proxy-core/src/main/java/group/flyfish/rest/utils/RestLogUtils.java @@ -0,0 +1,73 @@ +package group.flyfish.rest.utils; + +import group.flyfish.rest.core.client.RestClientBuilder; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.http.HttpMessage; +import org.apache.http.client.methods.CloseableHttpResponse; + +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 日志打印相关 + * + * @author wangyu + */ +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@Slf4j +public final class RestLogUtils { + + private static final String LOG_PREFIX = "【Rest Invoke】"; + + /** + * 打印请求日志 + * + * @param builder 请求信息 + */ + public static void log(RestClientBuilder builder) { + if (log.isDebugEnabled()) { + log.debug("{} {} {}\nRequest Headers: {}\nParameters:{}\nBody:{}", LOG_PREFIX, builder.getMethod(), + builder.getUrl(), resolveMap(builder.getHeaders()), resolveMap(builder.getParams()), builder.getBody()); + } else { + log.info("{} {} {}", LOG_PREFIX, builder.getMethod(), builder.getUrl()); + } + } + + /** + * 打印响应信息 + * + * @param response 响应信息 + */ + public static void log(CloseableHttpResponse response) { + if (log.isDebugEnabled()) { + log.debug("{} Response Status: {}\nResponse Headers: {}\n", LOG_PREFIX, + response.getStatusLine().getStatusCode(), resolveHeaders(response)); + } + } + + /** + * 打印结果体 + * + * @param result 结果 + */ + public static void log(Object result) { + if (log.isDebugEnabled()) { + log.debug("{} Response Body:{}", LOG_PREFIX, JacksonUtil.toJson(result).orElse("no body")); + } + } + + private static String resolveHeaders(HttpMessage message) { + return Arrays.stream(message.getAllHeaders()) + .map(header -> String.join("=", header.getName(), header.getValue())) + .collect(Collectors.joining(";")); + } + + private static String resolveMap(Map headers) { + return headers.entrySet().stream() + .map(header -> String.join("=", header.getKey(), String.valueOf(header.getValue()))) + .collect(Collectors.joining(";")); + } +} diff --git a/rest-proxy-core/src/test/resources/application.yml b/rest-proxy-core/src/test/resources/application.yml index 02bddaf..608e766 100644 --- a/rest-proxy-core/src/test/resources/application.yml +++ b/rest-proxy-core/src/test/resources/application.yml @@ -7,3 +7,8 @@ rest: dsep: http://220.194.160.6:8091/jeecg-boot/api bdmp: http://localhost:8081 damp: http://60.221.255.208:18092/api + +debug: true +logging: + level: + group.flyfish.rest: debug