ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

     

    goldfing/AndroidProjects

    Contribute to goldfing/AndroidProjects development by creating an account on GitHub.

    github.com

     

    끝.

Designed by Tistory.