2014-07-25 2 views
12

Ich habe Retrofit verwendet, um HTTP-Anfragen und JSON-Parsing zu machen, und ich liebte es, Debug-Logs zu aktivieren. Logs erlauben Body Requests, URLs zu sehen ... was sehr nützlich ist. Als Retrofit OkHttp verwenden, frage ich mich, ob OkHttp auch eine Möglichkeit, Protokolle für jede Anfragen aktiviert haben.OKHttp - Logs aktivieren

Antwort

10

Das Interceptor-Feature wird derzeit überprüft, Sie können jedoch eine eigene Version von okHttp mit dem Feature erstellen, indem Sie die Codeänderungen in the pull request anwenden.

Sie können die Funktionalität implementieren Sie wollen etwas, wie diese

// 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 innerhalb des Pull-Anforderung enthalten, wenn Sie mehr sehen wollen.

Ich werde Sie im Voraus über diese Verwendung warnen müssen. Möglicherweise gibt es Änderungen an der Interceptor-API, da sie noch nicht zusammengeführt wurden. Verwenden Sie sie nicht mit Produktionscode, aber sie ist unschädlich genug für persönliche Tests.

7

Noch keine. Aber es gibt eine interceptors feature in der Entwicklung, die es leicht machen sollte.

+1

Die Funktion bereits implementiert ist: https://github.com/square/okhttp/wiki/Interceptors – kotucz

20

ein Interceptor verwenden, können Sie die folgende Klasse definieren:

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

Und es hinzufügen:

OkHttpClient client = new OkHttpClient.Builder() 
    .addInterceptor(new LoggingInterceptor()) 
    .build(); 
+0

das gibt mir nicht unterstützte Aktion –