[ Java ] RequestLog, HTTP 请求日志与补偿工具

294 天前
 wolfie

简介

基于 SpringBoot, 可以记录 Http 请求日志,根据日志可选重试补偿。
特点:侵入小,集成简单。

适用场景

对外请求(第三方 API 、内部服务请求),或者被请求时( Servlet )
记录日志分析,后续根据日志重试补偿。


简单示例

RestTemplate 为例支持其他( ApacheHttpClient 、OKHttp 、Feign )

Maven 依赖


<dependency>
    <groupId>io.github.requestlog</groupId>
    <artifactId>request-log-resttemplate-starter</artifactId>
    <version>1.0</version>
</dependency>

增强客户端


@RequestLogEnhanced
@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

定义一个持久化


记录日志用,不定义默认加载一个 Slf4jRequestLogRepository

@Component
public class MyRequestLogRepository implements IRequestLogRepository {
    @Override
    public void saveRequestLog(RequestLog requestLog) {
        // save request log
    }
    @Override
    public void saveRequestLogAndRetryJob(RequestLog requestLog, RequestRetryJob requestRetryJob) {
        // save request log and retry job
    }
}

包装代码


包装后的代码,出现 Exceptionhttp code2xx 就算失败,就会记录

// 原始请求
String result = restTemplate.getForObject("url", String.class);

// 使用 LogContext 包装请求
String result = LogContext.log().execute(() -> {
    return restTemplate.getForObject("url", String.class);
});

更详细的包装代码


看个意思,如果感兴趣,看项目内详细文档吧。

LogContext.retry()
        .retryWaitStrategy(RetryWaitStrategy.FIXED)
        .retryInterval(60)
        .ignoreException(RuntimeException.class, IOException.class, NumberFormatException.class)
        .ignoreException(exception -> exception instanceof ClassCastException)
        .successWhenResponse(requestContext -> {
            return requestContext.getResponseCode() == 200;
        })
        .execute(() -> {
            return restTemplate.getForObject("url", String.class);
        });

其他


已上传到中央仓库(阿里 mirror 可能还没有同步)
欢迎体验、提意见、提需求

项目地址:https://github.com/requestlog/request-log
RestTemplate 使用方式
ApacheHttpClient 使用方式
OKHttp 使用方式
Feign 使用方式
Servlet 使用方式

1253 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1019044

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX