目的:
1.不希望打一堆乱七八糟的console日志
2.希望正常情况下打debug, 异常情况下打info便于生产环境调试
package com.mcc.util;
import okhttp3.*;
import okio.Buffer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* Created by Mingchenchen on 2017/11/13.
*/
public class OkHttpLoggingInterceptor implements Interceptor {
//自定义名称,简洁 同时能够通过调整包日志级别统一设置
private static Logger logger = LoggerFactory.getLogger("com.mcc.HttpLog");
@Override
public Response intercept(Chain chain) throws IOException {
//chain里面包含了request和response
Request request = chain.request();
long t1 = System.currentTimeMillis();
Response response = chain.proceed(request);
long t2 = System.currentTimeMillis();//收到响应的时间
//获取requestBody
String requestString = "";
RequestBody requestBody = request.body();
if (requestBody != null) {
Buffer buffer = new Buffer();
requestBody.writeTo(buffer);
requestString = buffer.readUtf8();
}
//获取responseBody
ResponseBody responseBody = response.peekBody(1024 * 1024);
if (response.isSuccessful()) {
if (logger.isDebugEnabled()) {
logger.debug("[--> {} {} {} ({}ms)]", request.method(), response.code(), request.url(), (t2 - t1));
logger.debug("[--> body: {}]", requestString);
logger.debug("[<-- resp: {}]\n", responseBody.string());
}
} else {
logger.warn("[--> {} {} {} ({}ms)]", request.method(), response.code(), request.url(), (t2 - t1));
logger.warn("[--> body: {}]", requestString);
logger.warn("[<-- resp: {}]\n", responseBody.string());
}
return response;
}
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient().newBuilder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.addInterceptor(new OkHttpLoggingInterceptor())
.build();
String body = "{\"startTime\":\"2017-10-30 00:27:00\",\"serviceName\":\"gapi\",\"endTime\":\"2017-11-30 17:27:16\",\"logsFilterMap\":{}}";
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), body);
Request request = new Request.Builder()
.url("http://gapi.dev-ag.xx.com/internal-api/v2/trace/query?pn=1&ps=8")
.post(requestBody)
.build();
client.newCall(request).execute();
client.newCall(request).execute();
client.newCall(request).execute();
client.newCall(request).execute();
}
}
效果: