You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中Retrofit日志不显示问题排查求助

Retrofit HttpLoggingInterceptor 无日志输出排查方案

1. 确认依赖是否正确添加

确保Module级build.gradle(或build.gradle.kts)中引入了日志拦截器依赖,版本需与OkHttp版本匹配:

// build.gradle.kts
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")

2. 检查日志级别配置

HttpLoggingInterceptor默认不输出详细日志,必须显式设置级别,调试时建议用BODY级获取完整请求/响应内容:

val loggingInterceptor = HttpLoggingInterceptor().apply {
    level = HttpLoggingInterceptor.Level.BODY
}

级别说明:

  • NONE:无日志输出
  • BASIC:仅输出请求方法、URL、响应状态码及耗时
  • HEADERS:输出请求/响应头部信息
  • BODY:输出完整请求/响应的头部与Body内容

3. 验证拦截器是否添加到OkHttpClient

必须将日志拦截器加入OkHttpClient的拦截器链,且Retrofit需绑定该客户端:

// 构建带日志拦截器的OkHttpClient
val okHttpClient = OkHttpClient.Builder()
    .addInterceptor(loggingInterceptor)
    .build()

// Retrofit绑定该客户端
val retrofit = Retrofit.Builder()
    .baseUrl("http://api.themoviedb.org/3/")
    .client(okHttpClient) // 关键:不能遗漏此步骤
    .addConverterFactory(GsonConverterFactory.create())
    .build()

4. 检查Logcat过滤条件

  • 默认日志Tag为HttpLoggingInterceptor,可直接在Logcat搜索该Tag
  • 确保Logcat日志级别设置为Verbose或Info(若仅选Error会过滤掉调试日志)

5. 确认网络安全配置有效性

虽然已开启明文流量,仍需验证配置是否正确:
res/xml/network_security_config.xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">api.themoviedb.org</domain>
    </domain-config>
</network-security-config>

并在AndroidManifest.xml的<application>标签中引用:

<application
    ...
    android:networkSecurityConfig="@xml/network_security_config">
    ...
</application>

配置错误会导致请求无法发出,自然无日志。

6. 排查Coroutine异常处理

若在Coroutine中调用接口,需确保异常被打印而非吞掉:

viewModelScope.launch {
    try {
        val response = movieApi.getPopularMovies()
        // 处理响应
    } catch (e: Exception) {
        Log.e("MovieApiRequest", "请求失败", e) // 必须打印异常栈信息
    }
}

7. 检查ProGuard/R8混淆规则(仅Release版本)

若为Release包,混淆可能移除日志代码,需在proguard-rules.pro中添加:

-keep class okhttp3.** { *; }
-keep class okio.** { *; }
-keep class retrofit2.** { *; }
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn retrofit2.**

8. 自定义拦截器验证请求是否触发

若以上步骤均无效,可添加自定义拦截器验证请求是否被执行:

val testInterceptor = Interceptor { chain ->
    val request = chain.request()
    Log.d("TestInterceptor", "请求URL: ${request.url}")
    val response = chain.proceed(request)
    Log.d("TestInterceptor", "响应状态码: ${response.code}")
    response
}

将其加入OkHttpClient,若该拦截器有日志输出,说明HttpLoggingInterceptor配置存在问题;若无输出,则请求未被触发,需检查ViewModel/Repository层的调用逻辑。

内容的提问来源于stack exchange,提问作者Zin Win Htet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:20:57