2014-07-25 25 views
12

Tôi đã sử dụng Retrofit để thực hiện các yêu cầu Http và phân tích cú pháp Json và tôi thích cách bật nhật ký gỡ lỗi. Nhật ký cho phép xem yêu cầu nội dung, url ... rất hữu ích. Khi Retrofit sử dụng OkHttp, tôi tự hỏi nếu OkHttp cũng có một cách để kích hoạt các bản ghi cho mỗi yêu cầu được thực hiện.OkHttp - Bật nhật ký

Trả lời

10

Tính năng đánh chặn hiện đang được xem xét, nhưng bạn có thể tạo phiên bản okHttp của riêng bạn bằng tính năng này bằng cách áp dụng các thay đổi mã trong the pull request.

Bạn có thể thực hiện các chức năng mà bạn muốn với một cái gì đó như thế này

// 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 được bao gồm trong yêu cầu kéo nếu bạn muốn xem chi tiết.

Tôi sẽ phải cảnh báo bạn trước khi sử dụng tính năng này. Có thể có những thay đổi đối với API đánh chặn vì nó chưa được hợp nhất. Không sử dụng nó với mã sản xuất, nhưng nó vô hại đủ để thử nghiệm cá nhân.

7

Chưa có. Nhưng có một số interceptors feature đang được phát triển để dễ dàng.

+1

Tính năng này đã được triển khai: https://github.com/square/okhttp/wiki/Interceptors – kotucz

20

Sử dụng một Interceptor, bạn có thể xác định các lớp sau:

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

Và thêm nó:

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

cung cấp cho tôi hành động không được hỗ trợ –

Các vấn đề liên quan