2015-10-15 47 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可以看到日志!