1. 程式人生 > >利用logger攔截列印完整的okhttp網路請求和響應日誌

利用logger攔截列印完整的okhttp網路請求和響應日誌

最近專案中使用的網路請求工具是Retrofit,底層封裝的是OkHttp,通常除錯網路介面時都會將網路請求和響應相關資料通過日誌的形式打印出來。OkHttp也提供了一個網路攔截器okhttp-logging-interceptor,通過它能攔截okhttp網路請求和響應所有相關資訊(請求行、請求頭、請求體、響應行、響應行、響應頭、響應體)。

使用okhttp網路日誌攔截器:

 implementation 'com.squareup.okhttp3:logging-interceptor:3.5.0' //retrofit的log日誌

定義攔截器中的網路日誌工具

public class HttpLog implements HttpLoggingInterceptor.Logger {
    @Override
    public void log(String message) {
        Log.d("HttpLogInfo", message);
    }
}

初始化OkHttpClient,並新增網路日誌攔截器

 
  private static void initRetorfit() {
    if (SERVICE==null){
       SERVICE=new Retrofit.Builder().client(initHttpClient())
               .addConverterFactory(GsonConverterFactory.create())
               .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
               .baseUrl(ApiConstants.BASE_URL)
               .build()
               .create(ApiService.class);
    }
    }






 private static OkHttpClient initHttpChient() {
        Interceptor logInterceptor;
        //處理網路請求的日誌攔截輸出
        if (BuildConfig.DEBUG) {
            //只顯示基礎資訊
            logInterceptor = new HttpLoggingInterceptor(new HttpLog()).setLevel(HttpLoggingInterceptor.Level.BODY);
        } else {
            logInterceptor = new HttpLoggingInterceptor(new HttpLog()).setLevel(HttpLoggingInterceptor.Level.BODY);
        }

        return new OkHttpClient().newBuilder()
                .connectTimeout(HTTP_CONNECT_TIMEOUT, TimeUnit.SECONDS)
                .readTimeout(HTTP_CONNECT_TIMEOUT, TimeUnit.SECONDS)
                .addInterceptor(logInterceptor)  
                .build();
    }

打印出來的日誌