Retrofit2如何优雅地打印网络请求的报文日志

本文介绍了在移动端开发中,如何利用Retrofit2配合日志拦截器优雅地打印网络请求的详细日志,包括请求地址、参数、类型、响应耗时和结果。针对使用RxJava和Retrofit的场景,提到了使用第三方日志库避免部分机型日志打印问题和日志混乱的情况。
摘要由CSDN通过智能技术生成

在移动端开发时,我们常常需要像web端一样可以方便地查看我们向服务器发送请求的报文详细日志(如请求地址,请求参数,请求类型,服务器响应的耗时时间,请求返回的结果等等)。

使用Retrofit2时,如果我们需要打印上述的网络请求的日志,可以采用日志拦截器的方案得以实现。

1.导入网络库和日志库

我这里采用的是Rxjava +Retrofit

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
compile('com.github.ihsanbal:LoggingInterceptor:2.0.5') {
    exclude group: 'org.json', module: 'json'
}

(注意:如果采用的是okhttp官方的com.squareup.okhttp3:logging-interceptor日志库,可能会遇到以下两个问题:部分机型无法正常打印网络日志;当两个api调用时间非常接近是,两个请求的打印日志会混乱,并且当返回数据过多时,日志打印不完整)

2. 关键代码如下:

OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
//add log record
if (BuildConfig.DEBUG) {
//打印网络请求日志
LoggingInterceptor httpLoggingInterceptor = new LoggingInterceptor.Builder()
         .loggable(BuildConfig.DEBUG)
         .setLevel(Level.BASIC)
         .log(Platform.INFO)
         .request("Request")
         .response("Response")
         .build();
httpClientBuilder.addInterceptor(httpLoggingInterceptor);
}

httpClientBuilder.addInterceptor(chain -> addAuthIntercepter(chain)); //添加认证authIntercepter,验证调用者身份信息
Retrofit retrofit = new Retrofit.Builder()
         .client(httpClientBuilder.build())
         .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm").create()))
         .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
         .baseUrl(BASE_URL)
         .build();
IApiService mApiService = retrofit.create(IApiService.class);

3.这样在网络请求中能打印如下日志:

打印请求相关信息:


打印响应相关信息:


完美!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值