web-dev-qa-db-fra.com

OkHttp - Activer les journaux

J'ai utilisé Retrofit pour effectuer des requêtes HTTP et des analyses Json et j'ai adoré la façon d'activer les journaux de débogage. Les logs permettent de voir les requêtes de corps, url ... ce qui est très utile. Comme Retrofit utilise OkHttp, je me demande si OkHttp dispose également d’un moyen d’activer les journaux pour chaque demande effectuée.

14
Jul

La fonctionnalité d'intercepteurs est en cours de révision, mais vous pouvez créer votre propre version de okHttp avec la fonctionnalité en appliquant les modifications de code dans la demande d'extraction .

Vous pouvez implémenter la fonctionnalité que vous voulez avec quelque chose comme ça

// 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);

Un test est inclus dans la demande d'extraction si vous souhaitez en voir plus.

Je vais devoir vous prévenir à l'avance de l'utilisation de ceci. Il est possible que l'API d'intercepteur ait subi des modifications car il n'a pas encore été fusionné. Ne l'utilisez pas avec du code de production, mais il est suffisamment inoffensif pour des tests personnels.

11
seato

A l'aide d'une Interceptor, vous pouvez définir la classe suivante:

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;
  }
}

Et ajoutez le:

OkHttpClient client = new OkHttpClient.Builder()
  .addInterceptor(new LoggingInterceptor())
  .build();
22
James McCracken

Aucun pour l'instant. Mais il y a une fonctionnalité intercepteurs en cours de développement qui devrait faciliter la tâche.

7
Jesse Wilson

Il existe maintenant une solution officielle de Square (employé). Vous pouvez essayer: https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor

2
Hoang Huu

vous pouvez activer la journalisation et intégrer à Timber pour vous connecter uniquement en mode débogage.

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();
0
sajad abbasi