SW Engineering
[Android] Http 통신을 로그로 기록하기
Hans L
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
goldfing/AndroidProjects
Contribute to goldfing/AndroidProjects development by creating an account on GitHub.
github.com
끝.