RxJava2集成Retrofit2:无法通过HttpLoggingInterceptor获取API日志
解决Retrofit2 + RxJava2下HttpLoggingInterceptor无法输出日志的问题
我之前也碰到过类似的坑,结合你的配置和问题描述,咱们一步步排查解决:
1. 先排查依赖版本兼容性
你的Retrofit版本是2.1.0,但OkHttp日志拦截器用了3.9.1,版本差异过大可能导致兼容性问题。Retrofit 2.x和OkHttp 3.x是强绑定的,建议保持版本匹配:
- 要么把
logging-interceptor版本降级到和Retrofit 2.1.0适配的OkHttp版本(比如3.3.0) - 要么直接升级Retrofit到较新的稳定版(比如
2.9.0),同时同步升级OkHttp相关依赖,避免版本冲突导致拦截器失效
2. 纠正Logcat的过滤关键词
很多人会误以为日志标签是HttpLoggingInterceptor,但实际上它的默认日志标签是OkHttp!你之前搜错关键词了,试试在Logcat里搜索OkHttp,或者直接切换到Verbose级别查看全量日志,应该就能找到请求日志了。
3. 确认OkHttpClient的构建逻辑是否正确
确保你把日志拦截器正确添加到了OkHttpClient中,并且是在Debug模式下启用(避免生产环境泄露敏感数据)。给你一个标准的构建示例:
// 初始化日志拦截器并设置级别为BODY(输出完整请求/响应) HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // 构建OkHttpClient,注意用addInterceptor而非addNetworkInterceptor OkHttpClient okHttpClient = new OkHttpClient.Builder() .addInterceptor(loggingInterceptor) // 若有其他自定义拦截器,比如Header拦截器,也要正确添加 // .addInterceptor(new CustomHeaderInterceptor()) .build(); // 关联Retrofit与RxJava2适配器 Retrofit retrofit = new Retrofit.Builder() .baseUrl("你的API基础地址") .client(okHttpClient) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build();
注意:addNetworkInterceptor只拦截网络请求阶段,可能无法输出完整的请求/响应日志,建议改用addInterceptor。
4. 检查是否有其他拦截器干扰
如果你还添加了自定义Interceptor,一定要确保在intercept方法里调用了chain.proceed(request),否则请求链会被中断,日志拦截器无法正常工作。
5. 排查混淆配置(Debug包也可能中招)
如果你的Debug包开启了混淆,可能会把HttpLoggingInterceptor的代码混淆掉,导致日志无法输出。在proguard-rules.pro里添加以下规则保护OkHttp和Retrofit相关类:
# OkHttp 相关混淆规则 -dontwarn okhttp3.** -keep class okhttp3.** { *; } -keep interface okhttp3.** { *; } # Retrofit 相关混淆规则 -dontwarn retrofit2.** -keep class retrofit2.** { *; } -keep interface retrofit2.** { *; } -keepattributes Signature -keepattributes Exceptions
按照上面的步骤排查,应该就能顺利看到API请求日志了。
内容的提问来源于stack exchange,提问作者varmashrivastava
相关产品推荐
相关产品推荐

