OkHttpInterceptor未向LogCat输出日志问题咨询
解决OkHttpInterceptor未输出日志到LogCat的问题
我来帮你排查这个问题,结合你给出的代码片段,大概率是以下几个配置环节出了问题,按顺序检查就能解决:
1. 确保HttpLoggingInterceptor设置了正确的日志级别
你的getHttpLoggingInterceptor方法没写完,但很大概率是没设置日志级别——HttpLoggingInterceptor默认的级别是NONE,这种情况下不会输出任何日志。你需要显式设置日志级别,比如要输出完整的请求/响应体,就用Level.BODY:
private static HttpLoggingInterceptor getHttpLoggingInterceptor() { HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); // 关键:设置日志级别,可选值有NONE/BASIC/HEADERS/BODY loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); return loggingInterceptor; }
不同级别对应不同的日志内容:
NONE:无日志BASIC:只输出请求方法、URL、响应状态码和耗时HEADERS:输出请求和响应的头部信息BODY:输出完整的请求/响应头部+体内容(调试时最常用)
2. 检查拦截器的添加顺序与自定义拦截器的正确性
你先添加了自定义的getInterceptor(),再添加日志拦截器,这里要注意两个点:
- 自定义拦截器必须在
intercept方法中调用chain.proceed(request),否则请求会被拦截中断,后续的日志拦截器根本不会执行。比如自定义拦截器的正确写法:
private static Interceptor getInterceptor() { return new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request modifiedRequest = chain.request().newBuilder() // 你的自定义逻辑(比如添加Header) .addHeader("Authorization", "Bearer xxx") .build(); // 必须调用此方法,让请求继续传递到下一个拦截器/服务器 return chain.proceed(modifiedRequest); } }; }
- 日志拦截器的位置:如果你想记录经过自定义拦截器修改后的请求/响应,当前的顺序是对的;如果想记录原始请求,可以把日志拦截器放在自定义拦截器之前。
3. 确认HttpLoggingInterceptor依赖已正确引入
如果项目里没添加日志拦截器的依赖,代码编译可能通过但实际运行时不会输出日志。在你的build.gradle(Module level)中添加对应版本的依赖(注意要和OkHttp主库版本一致):
implementation 'com.squareup.okhttp3:logging-interceptor:4.11.0' // 替换为你使用的OkHttp版本
4. 验证BuildConfig.DEBUG是否为true
你的日志拦截器只在BuildConfig.DEBUG为true时添加,如果当前运行的不是Debug变体,或者gradle配置中Debug模式的DEBUG字段未设为true,日志拦截器根本不会被添加到OkHttpClient中。
检查gradle配置:
buildTypes { debug { buildConfigField "boolean", "DEBUG", "true" minifyEnabled false } release { buildConfigField "boolean", "DEBUG", "false" minifyEnabled true } }
也可以在代码中临时加一行日志确认:
if (BuildConfig.DEBUG) { Log.d("OkHttpDebug", "DEBUG模式,添加日志拦截器"); builder.addInterceptor(getHttpLoggingInterceptor()); }
5. 检查LogCat的过滤设置
有时候不是没输出日志,而是LogCat的过滤规则把日志挡住了:
- HttpLoggingInterceptor默认的日志标签是
OkHttp,可以在LogCat中搜索这个标签,或者直接取消标签过滤 - 确保LogCat的日志级别选的是
Verbose或Info(日志拦截器的输出大多是Info级别) - 检查是否开启了“Show only selected application”,确保选中的是当前运行的APP
按照上面的步骤逐一排查,应该就能解决日志不输出的问题了。
内容的提问来源于stack exchange,提问作者Gokul Nath KP
相关产品推荐
相关产品推荐

