HttpLoggingInterceptor没有使用改进2进行日志记录

Dan*_*ico 5 android kotlin retrofit2

我试图使用refrofit2,kotlin和logging-interceptor记录所有请求(使用网络拦截器):

  • 改造:"2.0.2"
  • okhttp3:"3.2.0"
  • com.squareup.okhttp3:logging-interceptor 3.2.0

喜欢:

val interceptor = HttpLoggingInterceptor()
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

    val okHttpClient = OkHttpClient.Builder()
        .addNetworkInterceptor(interceptor) // same for .addInterceptor(...)
        .connectTimeout(30, TimeUnit.SECONDS) //Backend is really slow
        .writeTimeout(30, TimeUnit.SECONDS)
        .readTimeout(30, TimeUnit.SECONDS)
        .build()

    sRestAdapter = Retrofit.Builder()
        .client(okHttpClient)
        .baseUrl(if (host.endsWith("/")) host else "$host/")
        .addConverterFactory(GsonConverterFactory.create(gson()))
        .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
        .build()
Run Code Online (Sandbox Code Playgroud)

它打印:

D/OkHttp: --> GET url...
D/OkHttp: --> END GET
Run Code Online (Sandbox Code Playgroud)

怎么了?

---------------编辑--------

执行主线程请求的错误不会由记录器显示,因此请小心.

Mar*_*ski 10

代替

val okHttpClient = OkHttpClient.Builder()
    .addNetworkInterceptor(interceptor)
    ...
Run Code Online (Sandbox Code Playgroud)

你应该有类似的东西:

val okHttpClient = OkHttpClient.Builder()
    .addInterceptor(interceptor)
    ...
Run Code Online (Sandbox Code Playgroud)

作为addNetworkInterceptor()具有观察单个网络请求和响应的拦截器的播放,同时addInterceptor()添加观察每个调用的完整跨度的拦截器:从建立连接(如果有的话)直到​​选择响应源(原始服务器,缓存,或两者).

编辑

执行主线程请求的错误不会由记录器显示,因此请小心

在主线程上进行网络连接不是"普通"错误.这将导致你的应用程序被系统杀死NetworkOnMainThreadException,这将在拦截器被给予任何机会运行之前发生.


san*_*adi 8

private val interceptor = run {
    val httpLoggingInterceptor = HttpLoggingInterceptor()
    httpLoggingInterceptor.apply {
        httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
    }
}


private val okHttpClient = OkHttpClient.Builder()
    .addNetworkInterceptor(interceptor) // same for .addInterceptor(...)
    .connectTimeout(30, TimeUnit.SECONDS) //Backend is really slow
    .writeTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .build()
Run Code Online (Sandbox Code Playgroud)