HTTP要求とJSON解析を行うためにRetrofitを使用し、デバッグログをオンにする方法が気に入りました。ログはボディリクエスト、URL ...を見ることができます。これはとても便利です。 RetrofitはOkHttpを使用しているので、OkHttpには、行われた各要求のログを有効にする方法もあるのではないかと思います。
インターセプター機能は現在レビュー中ですが、コードの変更を プルリクエスト に適用することで、この機能を使用して独自のバージョンの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);
A test は、プルリクエストに含まれています。
これを使用する場合は、事前に警告する必要があります。まだマージされていないため、インターセプターAPIに変更がある可能性があります。本番コードでは使用しないでください。ただし、個人的なテストには十分無害です。
Interceptor
を使用すると、次のクラスを定義できます。
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();
まだありません。しかし、開発を容易にする インターセプター機能 が開発中です。
Square(従業員)の公式ソリューションがあります。あなたが試すことができます: https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor
OkHttpネットワーク呼び出しのUIとデバッグを改善するには、[〜#〜] gander [〜#〜]のようなライブラリを使用できます。
その他の機能は次のとおりです。
Ganderを使用するアプリは、進行中のHTTPアクティビティの概要を示す通知を表示します。通知をタップすると、完全なガンダーUIが起動します。アプリはオプションで通知を抑制し、独自のインターフェースから直接Gander UIを起動できます。 HTTPインタラクションとそのコンテンツは、共有インテントを介してエクスポートできます。
HTTPアクティビティの検索、およびリクエストとレスポンス
ロギングを有効にして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
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> Log.d(YourClass.class.getSimpleName(), "OkHttp: " + message));
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient.getHttpClient().interceptors().add(logging);