web-dev-qa-db-ja.com

OkHttp-ログを有効にする

HTTP要求とJSON解析を行うためにRetrofitを使用し、デバッグログをオンにする方法が気に入りました。ログはボディリクエスト、URL ...を見ることができます。これはとても便利です。 RetrofitはOkHttpを使用しているので、OkHttpには、行われた各要求のログを有効にする方法もあるのではないかと思います。

19
Jul

インターセプター機能は現在レビュー中ですが、コードの変更を プルリクエスト に適用することで、この機能を使用して独自のバージョンの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に変更がある可能性があります。本番コードでは使用しないでください。ただし、個人的なテストには十分無害です。

14
seato

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();
25
James McCracken

まだありません。しかし、開発を容易にする インターセプター機能 が開発中です。

7
Jesse Wilson

Square(従業員)の公式ソリューションがあります。あなたが試すことができます: https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor

3

OkHttpネットワーク呼び出しのUIとデバッグを改善するには、[〜#〜] gander [〜#〜]のようなライブラリを使用できます。

その他の機能は次のとおりです。

  1. Ganderを使用するアプリは、進行中のHTTPアクティビティの概要を示す通知を表示します。通知をタップすると、完全なガンダーUIが起動します。アプリはオプションで通知を抑制し、独自のインターフェースから直接Gander UIを起動できます。 HTTPインタラクションとそのコンテンツは、共有インテントを介してエクスポートできます。

  2. HTTPアクティビティの検索、およびリクエストとレスポンス

  3. メインのガンダーアクティビティは独自のタスクで起動され、Android 7.xマルチウィンドウサポートを使用してホストアプリのUIと一緒に表示できます。
  4. ガンダーは以下のバリアントを提供します
    • 永続性:ログをディスクに保存し、TTLを制御できます
    • メモリデータベース:アプリのライフサイクルの間、ログはメモリに保存されます。
    • いいえOp:これは何もしません。したがって、ユーザーがデバッグビルドでのみGanderを必要とする場合、バリアントを処理せずにCompile NoOpをリリースできますif(Build.DEBUG)..etc
1
Ashok Varma

ロギングを有効にして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();
1
sajad abbasi

okhttp3

HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> Log.d(YourClass.class.getSimpleName(), "OkHttp: " + message));
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
okHttpClient.getHttpClient().interceptors().add(logging);
0
xordonkey