【发布时间】:2019-11-08 03:25:08
【问题描述】:
我在我的 Android 网络应用程序中使用了 Retrofit
api "com.squareup.retrofit2:retrofit:$retrofit2Version"
api "com.squareup.retrofit2:adapter-rxjava2:$retrofit2Version"
api "com.squareup.retrofit2:converter-scalars:$retrofit2Version"
api "com.squareup.retrofit2:converter-jackson:$retrofit2Version"
在开发我的项目时,使用
记录 HTTP 请求和响应非常有用api "com.squareup.okhttp3:logging-interceptor:$okhttp3Version"
我配置改造如下:-
abstract class BaseService {
internal val okHttpClient = OkHttpClient.Builder()
.connectTimeout(OK_HTTP_CLIENT_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(OK_HTTP_CLIENT_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(OK_HTTP_CLIENT_TIMEOUT, TimeUnit.SECONDS)
.callTimeout(OK_HTTP_CLIENT_TIMEOUT, TimeUnit.SECONDS)
.followSslRedirects(true)
.retryOnConnectionFailure(true)
.followRedirects(true)
.addInterceptor(HTTP_HEADERS)
.addInterceptor(HTTP_LOGGING_INTERCEPTOR)
.build()
companion object {
private const val OK_HTTP_CLIENT_TIMEOUT: Long = 60
private val HTTP_LOGGING_INTERCEPTOR = HttpLoggingInterceptor()
private val HTTP_HEADERS = constructHeaderInterceptor()
private const val HTTP_ORIGIN_HEADER = "Origin"
private const val HTTP_ORIGIN_VALUE = "Android"
private fun constructHeaderInterceptor(): Interceptor {
return Interceptor {
val request = it.request()
val newRequest = request.newBuilder().addHeader(HTTP_ORIGIN_HEADER, HTTP_ORIGIN_VALUE).build()
it.proceed(newRequest)
}
}
init {
HTTP_LOGGING_INTERCEPTOR.level = HttpLoggingInterceptor.Level.NONE
}
}
}
然后在我的Service实现中:-
class Service private constructor() : BaseService(), Api {
private val service: Api
init {
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.client(okHttpClient)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(JacksonConverterFactory.create())
.addConverterFactory(ScalarsConverterFactory.create())
.build()
service = retrofit.create(Api::class.java)
}
override fun query(authenticationToken: String, request: Request): Single<Response<QueryResponse>> {
return service.query(authenticationToken, request)
}
companion object {
private val BASE_URL = BuildConfig.SDK_BASE_URL
private val INSTANCE = Service()
fun instance(): Api {
return INSTANCE
}
}
}
我面临的问题是当我使用时
HttpLoggingInterceptor.Level.BODY
logcat 输出“过多”,因为我的一些网络调用响应是非常大的 Json 文档。
我想要的是我可以在细粒度级别配置我的网络呼叫记录,例如逐个调用。
我可以看到如何实现这一点的唯一方法是为每个日志记录级别创建一对 OkHttpClient 和 retrofit,例如BODY、HEADERS、BASIC 和 NONE。
最好能够逐个调用设置日志记录值,并且只使用单个 OkHttpClient 和 retrofit 实例。
有什么方法可以在呼叫级别设置不同的日志记录级别?
【问题讨论】:
标签: android logging retrofit2 okhttp3