Androidアプリ開発の通信ログの話。
okhttpで「開発版の場合ではログを全出し(HttpLoggingInterceptor.Level.BODY
)」という設定をよくやるけど、この時困るのが画像アップロード時などに大量のバイナリログが出てしまうこと。
ログが追いづらくなるばかりか、容量過多か何かでlogcatプロセスが落ちてしまう場合すらある。
この場合、Interceptorでmultipart通信時のみログレベルを HEADERS
以下に落としてやれば良さそう
実装としては以下のような感じ
fun getClient(): OkHttpClient {
val httpLoggingInterceptor =
HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
return OkHttpClient.Builder()
.addInterceptor(MultipartLoggingInterceptor(httpLoggingInterceptor))
.addInterceptor(httpLoggingInterceptor)
.build()
}
class MultipartLoggingInterceptor constructor(
private val loggingInterceptor: HttpLoggingInterceptor
) : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val isMultipart = chain.request().body is MultipartBody
if (isMultipart) {
loggingInterceptor.level = HttpLoggingInterceptor.Level.HEADERS
}
val request = chain.request().newBuilder().build()
return chain.proceed(request)
}
}
参考
I have successfully implemented a network request that uploads a multipart/form-data file. Presumably due to the logging level we have set on the OkHttp client,...
-> このmultipart判定はうまく動かなかった