2015-10-15 85 views
4

以前版本的Retrofit使用RestAdapter並提供了啓用日誌。爲什麼該功能被刪除改裝2.0登錄改造2.0

要啓用日誌,我要做..

Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

    /** Handles Log */ 
    retrofit.client().interceptors().add(new LoggingInterceptor()); 


class LoggingInterceptor implements Interceptor { 
@Override 
public Response intercept(Interceptor.Chain chain) throws IOException { 
    Request request = chain.request(); 

    long t1 = System.nanoTime(); 
    Logger.d(String.format("Sending request %s on %s%n%s", 
      request.url(), chain.connection(), request.headers())); 

    Response response = chain.proceed(request); 

    long t2 = System.nanoTime(); 
    Logger.d(String.format("Received response for %s in %.1fms%n%s", 
      response.request().url(), (t2 - t1)/1e6d, response.headers())); 

    // Logger.d(""+new String(response.body().bytes())); 
    return response; 
} 

這是唯一的解決方法?以前的規定是非常方便的...

+0

[Logging with Retrofit 2]的可能重複(http://stackoverflow.com/questions/32514410/logging-with-retrofit-2) – bryant1410

回答

2

意圖改造是執行類型安全de /序列化。可能它已經丟棄了應該由http客戶端執行的功能,就像它是日誌記錄一樣。

合理,HTTP客戶端應該登錄收到,而不是改造的響應。你的問題太廣泛了,來自Square的人應該增加更多。

0
OkHttpClient okHttpClient = new OkHttpClient.Builder() 
      .addInterceptor(new Interceptor() { 
       @Override 
       public Response intercept(Chain chain) throws IOException { 
        Request request = chain.request(); 
        if (BuildConfig.DEBUG) { 
         Log.e(getClass().getName(), request.method() + " " + request.url()); 
         Log.e(getClass().getName(), "" + request.header("Cookie")); 
         RequestBody rb = request.body(); 
         Buffer buffer = new Buffer(); 
         if (rb != null) 
          rb.writeTo(buffer); 
         LogUtils.LOGE(getClass().getName(), "Payload- " + buffer.readUtf8()); 
        } 
        return chain.proceed(request); 
       } 
      }) 
      .readTimeout(60, TimeUnit.SECONDS) 
      .connectTimeout(60, TimeUnit.SECONDS) 
      .build(); 

      iIdgardServices = new Retrofit.Builder() 
        .baseUrl("Your Base URL") 
        .client(okHttpClient) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build() 
        .create(Your Service Interface .class); 

適用於我

1

對於改裝2 okhttp記錄具有以下記錄:

private OkHttpClient getOkHttpClient() { 
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
    if (BuildConfig.LOG_HTTP_CALLS) { 
     logging.setLevel(HttpLoggingInterceptor.Level.BODY); 
    } 

    return new OkHttpClient.Builder() 
      .addInterceptor(logging).build(); 
} 

build.gradle依賴性是

compile 'com.squareup.okhttp3:logginginterceptor:2.1.0'

0
private static final String HOST = Urls.HOST; 

private static final OkHttpClient.Builder mHttpClientBuilder = new OkHttpClient.Builder(); 

static { 
    //add this line PS: `Level.NONE` is close 
    mHttpClientBuilder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) 
      .addInterceptor(new EncryptInterceptor()) 
      .connectTimeout(30, TimeUnit.SECONDS) 
      .retryOnConnectionFailure(true) 
      .addNetworkInterceptor(new TokenInterceptor()) 
      .authenticator(new DefaultAuthenticator()); 
} 

public static <S> S createService(Class<S> serviceClass) { 
    OkHttpClient client = mHttpClientBuilder.build(); 
    Retrofit retrofit = mBuilder.client(client).build(); 
    return retrofit.create(serviceClass); 
} 

將logcat更改爲DEBUG可以看到日誌!