-
[Android] Http 통신을 로그로 기록하기Mobile Engineering 2020. 4. 18. 13:22
How to logging Http communication used by Okhttp?
모바일 프로그래밍을 하다 보면 인증, 로깅등을 위해서 Http 정보를 로그로 출력해야 하는 상황이 있다.
Retrofit과 OkHttp를 이용해서 Http 통신에 대한 로그도 출력해보자.
Retrofit, OkHttp에 대한 소개와 사용법은 이미 알고 있다고 가정한다.
1. app:gradle.build에 아래와 같이 OkHttp Logging Lib를 추가한다.
... dependencies { ... // OkHttp implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.5.0' // Use for HttpLoggingInterceptor implementation group: 'com.squareup.okhttp3', name: 'logging-interceptor', version: '4.5.0' ... }
2. OkHttpClient를 생성하는 부분에 아래와 같이 설정한다.
import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor ... // Set Log Level of OkHttp val interceptor = HttpLoggingInterceptor() if (BuildConfig.DEBUG) { interceptor.level = HttpLoggingInterceptor.Level.BODY } else { interceptor.level = HttpLoggingInterceptor.Level.NONE } val client = OkHttpClient().newBuilder() .addNetworkInterceptor(interceptor) .build() ...
3. 이렇게 설정하고 나서 LogCat에서 통신을 하면 아래와 같은 로그가 찍힌다.
com.hans.android.httploginterceptorexam D/OkHttp: --> GET https://goldfing.github.io/api/city.json h2 com.hans.android.httploginterceptorexam D/OkHttp: Host: goldfing.github.io com.hans.android.httploginterceptorexam D/OkHttp: Connection: Keep-Alive com.hans.android.httploginterceptorexam D/OkHttp: Accept-Encoding: gzip com.hans.android.httploginterceptorexam D/OkHttp: User-Agent: okhttp/4.5.0 com.hans.android.httploginterceptorexam D/OkHttp: --> END GET com.hans.android.httploginterceptorexam D/OkHttp: <-- 200 https://goldfing.github.io/api/city.json (244ms) com.hans.android.httploginterceptorexam D/OkHttp: content-type: application/json; charset=utf-8 com.hans.android.httploginterceptorexam D/OkHttp: server: GitHub.com com.hans.android.httploginterceptorexam D/OkHttp: last-modified: Sat, 18 Apr 2020 06:19:21 GMT com.hans.android.httploginterceptorexam D/OkHttp: etag: "5e9a9be9-64" com.hans.android.httploginterceptorexam D/OkHttp: access-control-allow-origin: * com.hans.android.httploginterceptorexam D/OkHttp: expires: Sat, 18 Apr 2020 08:23:23 GMT com.hans.android.httploginterceptorexam D/OkHttp: cache-control: max-age=600 com.hans.android.httploginterceptorexam D/OkHttp: x-proxy-cache: MISS com.hans.android.httploginterceptorexam D/OkHttp: x-github-request-id: 9140:649D:1B7CA1:1DA7C1:5E9AB6A3 com.hans.android.httploginterceptorexam D/OkHttp: accept-ranges: bytes com.hans.android.httploginterceptorexam D/OkHttp: date: Sat, 18 Apr 2020 08:47:40 GMT com.hans.android.httploginterceptorexam D/OkHttp: via: 1.1 varnish com.hans.android.httploginterceptorexam D/OkHttp: age: 0 com.hans.android.httploginterceptorexam D/OkHttp: x-served-by: cache-hnd18734-HND com.hans.android.httploginterceptorexam D/OkHttp: x-cache: HIT com.hans.android.httploginterceptorexam D/OkHttp: x-cache-hits: 1 com.hans.android.httploginterceptorexam D/OkHttp: x-timer: S1587199661.545558,VS0,VE174 com.hans.android.httploginterceptorexam D/OkHttp: vary: Accept-Encoding com.hans.android.httploginterceptorexam D/OkHttp: x-fastly-request-id: 61571f023705a259430d5d6c8147a126575ec41c com.hans.android.httploginterceptorexam D/OkHttp: content-length: 100 com.hans.android.httploginterceptorexam D/OkHttp: { com.hans.android.httploginterceptorexam D/OkHttp: "title": "Hello Cities", com.hans.android.httploginterceptorexam D/OkHttp: "city": [ com.hans.android.httploginterceptorexam D/OkHttp: "Seoul", com.hans.android.httploginterceptorexam D/OkHttp: "Newyork", com.hans.android.httploginterceptorexam D/OkHttp: "London", com.hans.android.httploginterceptorexam D/OkHttp: "Busan" com.hans.android.httploginterceptorexam D/OkHttp: ] com.hans.android.httploginterceptorexam D/OkHttp: } com.hans.android.httploginterceptorexam D/OkHttp: <-- END HTTP (100-byte body)
참 쉽죠! Request와 Response에 대한 모든 정보가 나오니 API 통신을 디버깅할때 아주 편리합니다.
전체 코드는 아래를 참고하세요.
https://github.com/goldfing/AndroidProjects/tree/master/HttpLogInterceptorExam
끝.
'Mobile Engineering' 카테고리의 다른 글
[Android] Koin Test로 테스트 코드 작성하기 (0) 2020.05.12 [Android] Koin vs Dagger2 (0) 2020.04.21 [Android] Mockito Plugin 세팅 - MockMaker (0) 2020.04.19 [Android] Koin으로 의존성 주입하기 (0) 2020.04.19 [Android] No static method metafactory (1) 2020.04.18