You need to enable JavaScript to run this app. 如何在request.newBuilder()中使用httpLoggingInterceptor打印接口日志
优惠活动
大模型
产品
解决方案
定价
更多

如何在request.newBuilder()中使用httpLoggingInterceptor打印接口日志

问题排查与解决方案

核心问题原因

你混淆了Request.Builder和OkHttpClient.Builder的API范围:client()方法属于OkHttpClient.Builder的成员方法,Request.Builder本身不提供该方法,因此在request.newBuilder()的调用链中无法找到该方法。
你之前的调研结论存在理解偏差,配置日志打印不需要给Request对象设置客户端,只需要用你已经配置好日志拦截器的OkHttpClient实例发起请求即可。

正确实现步骤

  1. 你现有的OkHttpClient配置、Request头部处理逻辑完全无需修改,只需要在发起请求时使用你创建的带日志拦截器的okHttpClient实例即可,日志会自动输出到Logcat。
  2. 完整示例代码如下:
// 配置带日志拦截器的OkHttpClient(你的原有代码逻辑正确)
val httpLoggingInterceptor = HttpLoggingInterceptor()
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
val okHttpClient: OkHttpClient = OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).build()

// 构建带动态头部的Request(你的原有逻辑正确,无需调整)
when {
    UserInfo.loginStatus -> {
        request = request.newBuilder()
            .header("Authorization", UserInfo.token)
            .build()
    }
    else -> {
        request = request.newBuilder().build()
    }
}

// 用配置好的okHttpClient发起请求,即可自动打印请求/响应日志
okHttpClient.newCall(request).enqueue(object : Callback {
    override fun onFailure(call: Call, e: IOException) {
        // 自定义请求失败处理逻辑
    }

    override fun onResponse(call: Call, response: Response) {
        // 自定义请求成功处理逻辑
    }
})

单请求自定义客户端的正确写法

如果你需要为单个请求单独配置特殊的客户端参数,不要修改Request,而是基于已有OkHttpClient实例衍生定制:

// 基于全局配置衍生单请求专用客户端
val singleRequestClient = okHttpClient.newBuilder()
    .connectTimeout(10, TimeUnit.SECONDS)
    // 可添加其他定制配置
    .build()
// 用定制客户端发起请求
singleRequestClient.newCall(request).enqueue(...)

内容的提问来源于stack exchange,提问作者Hubby Tiwari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 13:54:01