okhttp3 log 달기 (HttpLoggingInterceptor)

지프치프·2023년 8월 15일
0

Android

목록 보기
73/85
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

Retrofit을 이용해서 Rest API를 호출할 때
요청과 응답을 로그에서 보고싶을 때가 있다.

요청 부분과 응답 콜백에 로그를 찍어주면 되겠지만 이것도 한계가 있다.

이럴 때 HttpLoggingInterceptor를 OkHttpClient에 추가해주면 요청과 응답을 로그로 출력해주며 보여주는 정보도 꽤 다양하다!

구현

먼저 app수준 build.gradle에 dependency를 추가해주자

    implementation 'com.squareup.okhttp3:logging-interceptor:$latest_version'

그 후 OkHtppClient를 정의할 때 HttpLoggingInterceptor 클래스를 넣어지만 하면 된다.

    private var httpClient = OkHttpClient.Builder()
        .addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY })   // LoggingInterceptor 추가
        .connectTimeout(60, TimeUnit.SECONDS)
        .readTimeout(60, TimeUnit.SECONDS)
        .writeTimeout(60, TimeUnit.SECONDS)
        .build()

그리고 Retrofit 인스턴스를 정의할 때 위에서 만든 client를 넣어주면 끝이다

    fun getInstance() : Retrofit {
        instance?.let {
            return it
        } ?: run {
            instance = Retrofit.Builder()
                .baseUrl(Constants.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient)     // OkHttpClient 추가
                .build()
            return instance!!
        }
    }

그리고 앱을 실행하여 Rest API를 호출해보면 아래와 같이 로그가 출력되는 것을 확인할 수 있다.

I/okhttp.OkHttpClient: --> GET https://jsonplaceholder.typicode.com/posts/1
I/okhttp.OkHttpClient: --> END GET
I/okhttp.OkHttpClient: <-- 200 https://jsonplaceholder.typicode.com/posts/1 (758ms)
I/okhttp.OkHttpClient: date: Tue, 15 Aug 2023 10:56:29 GMT
I/okhttp.OkHttpClient: content-type: application/json; charset=utf-8
I/okhttp.OkHttpClient: x-powered-by: Express
I/okhttp.OkHttpClient: x-ratelimit-limit: 1000
I/okhttp.OkHttpClient: x-ratelimit-remaining: 999
I/okhttp.OkHttpClient: x-ratelimit-reset: 1691738801
I/okhttp.OkHttpClient: vary: Origin, Accept-Encoding
I/okhttp.OkHttpClient: access-control-allow-credentials: true
I/okhttp.OkHttpClient: cache-control: max-age=43200
I/okhttp.OkHttpClient: pragma: no-cache
I/okhttp.OkHttpClient: expires: -1
I/okhttp.OkHttpClient: x-content-type-options: nosniff
I/okhttp.OkHttpClient: etag: W/"124-yiKdLzqO5gfBrJFrcdJ8Yq0LGnU"
I/okhttp.OkHttpClient: via: 1.1 vegur
I/okhttp.OkHttpClient: cf-cache-status: HIT
I/okhttp.OkHttpClient: age: 12486
I/okhttp.OkHttpClient: report-to: {"endpoints":[{"url":"https:\/\/a.nel.cloudflare.com\/report\/v3?s=4j07c5T8u8lKioXuwcqbgsnIs6utozoB5h%2FltoqmKwM72J6LNgp5UST346SZ%2FEy%2FajipJUJ1TL67oqjgQZQFWKPyIBG4raKhQV4PMYuJFj3fxyoG3%2BobP8wNqliivqf9qk0lBRosedtw4DGJ7Ejt"}],"group":"cf-nel","max_age":604800}
I/okhttp.OkHttpClient: nel: {"success_fraction":0,"report_to":"cf-nel","max_age":604800}
I/okhttp.OkHttpClient: server: cloudflare
I/okhttp.OkHttpClient: cf-ray: 7f70e9462b1e2612-NRT
I/okhttp.OkHttpClient: alt-svc: h3=":443"; ma=86400
I/okhttp.OkHttpClient: {
I/okhttp.OkHttpClient:   "userId": 1,
I/okhttp.OkHttpClient:   "id": 1,
I/okhttp.OkHttpClient:   "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
I/okhttp.OkHttpClient:   "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
I/okhttp.OkHttpClient: }
I/okhttp.OkHttpClient: <-- END HTTP (292-byte body)

-- Blog footer --
개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글