我使用Retrofit来进行HTTP请求和JSON解析,并且很喜欢其开启调试日志的方式。日志可以显示请求体、URL等信息,非常有用。由于Retrofit使用OkHttp,我想知道是否也有一种方法来启用OkHttp的每个请求的日志记录。
我使用了Retrofit来进行HTTP请求和JSON解析,并且喜欢它的调试日志功能。日志记录能够展示请求体、URL等信息,这非常有用。由于Retrofit使用OkHttp,因此我想知道是否也有一种方法来启用OkHttp的每个请求的日志记录。我使用Retrofit来进行HTTP请求和JSON解析,并且很喜欢其开启调试日志的方式。日志可以显示请求体、URL等信息,非常有用。由于Retrofit使用OkHttp,我想知道是否也有一种方法来启用OkHttp的每个请求的日志记录。
我使用了Retrofit来进行HTTP请求和JSON解析,并且喜欢它的调试日志功能。日志记录能够展示请求体、URL等信息,这非常有用。由于Retrofit使用OkHttp,因此我想知道是否也有一种方法来启用OkHttp的每个请求的日志记录。通过使用拦截器
,您可以定义以下类:
class LoggingInterceptor implements Interceptor {
@Override public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
long t1 = System.nanoTime();
Log.d("OkHttp", String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
long t2 = System.nanoTime();
Log.d("OkHttp", String.format("Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));
return response;
}
}
并添加它:
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();
拦截器功能目前正在审查中,但您可以通过应用 pull request 中的代码更改构建自己的okHttp版本以包含该功能。
您可以使用类似以下的代码来实现所需的功能
// Create an interceptor which catches requests and logs the info you want
RequestInterceptor logRequests= new RequestInterceptor() {
public Request execute(Request request) {
Log.i("REQUEST INFO", request.toString());
return request; // return the request unaltered
}
};
OkHttpClient client = new OkHttpClient();
List<RequestInterceptor> requestInterceptors = client.requestInterceptors();
requestInterceptros.add(logRequests);
这里有一个测试,如果您想了解更多,请查看。
我必须提前警告您关于使用它的事项。由于拦截器API尚未合并,因此可能会对其进行更改。不要将其用于生产代码,但它足够无害以进行个人测试。
目前还没有相关的内容。但是正在开发一个拦截器功能,这将使其变得更加容易。
现在Square(员工)已经有了官方解决方案。
你可以尝试使用以下链接:
https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor针对OkHttp3库
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> Log.d(YourClass.class.getSimpleName(), "OkHttp: " + message));
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient.getHttpClient().interceptors().add(logging);
你可以启用日志记录并与Timber集成,以便仅在调试时记录日志。
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
Timber.tag("OkHttp: ");
Timber.i(message);
}
}).setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.build();
我补充一些关于OkHttp3的信息,因为它支持开箱即用的日志记录功能。
首先,请确保同时使用了这两个依赖项:OkHttp3的主要包和包含日志记录实现的特定包。这里我使用的是 3.14.6
版本。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.6</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>3.14.6</version>
</dependency>
然后正确配置您的 OkHttp 客户端。
...
import okhttp3.logging.HttpLoggingInterceptor;
...
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(message -> logger.info(message));
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addNetworkInterceptor(interceptor)
.build();
HttpLoggingInterceptor
解释如何记录日志,因此在上面的示例中,消息只是路由到一个Slf4j记录器以INFO
级别。为了更好地UI和调试OkHttp网络调用,您可以使用类似GANDER的库。
其他功能包括:
使用Gander的应用程序将显示一个通知,显示正在进行的HTTP活动的摘要。点击通知会启动完整的Gander UI。应用程序可以选择抑制通知,并从其自己的界面直接启动Gander UI。 HTTP交互及其内容可以通过共享意图导出。
搜索HTTP活动以及请求和响应
你可以使用以下代码添加日志:
public final OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new HttpLoggingInterceptor())
.cache(new Cache(cacheDir, cacheSize))
.build();
将使用默认配置:
Logger DEFAULT = message -> Platform.get().log(INFO, message, null);