Logger로 안드로이드 로그향상하기

더 쉽고빠른 로그정보!

Harry The Great
해리의 유목코딩

--

최근 항상 하던방식으로 Timber를 통해서 OKHttp로그를 보곤했었는데 최근 좌표값을 처리해야할 일이 있었는데 도저희 가독성이….. 읽기가 불가능한 수준으로 변해버렸습니다.

(없던 난독증도 생기게 해주는 로그…)

그래서 로그를 좀 이쁘게 보여줄 수 있는 라이브러리를 찾다가 발견한것이 Logger입니다. Logger는 로그도 이쁘게 보여주지만 다양한 로그 옵션을 보여줍 사용법도 정말 간단합니다. 아래와같은 키워드만 입력해준다면 아래와같이 간단히 사용할 수 있습니다.

Logger.d("hello");
Logger.d("hello %s %d", "world", 5);

클래스, 쓰레드, 메서드에 대한 모든정보를 출력해줍니다. 이전에 Log 클래스를 사용했을때는 List던 Map이던 Set이건 숫자건 모두 String포맷으로 바꾸어주어야했지만 Logger는 대부분의 primitive 타입을 지원합니다.

Logger.d(list);
Logger.d(map);
Logger.d(set);
Logger.d(new String[]);

가장 큰 장점은 JSON과 XML을 가독성 높게 표현할 수 있다는 점입니다.

기존 로그 출력

Logger 적용

설치법

implementation 'com.orhanobut:logger:2.2.0' //현재 최신버전

깃헙에서 최신버전을 체크한 후 그래들에 추가해준 뒤에 Application Level에서 한줄만 추가해주시면 됩니다.

Logger.addLogAdapter(new AndroidLogAdapter());Logger.d("hello");

옵션설정

디버그에서만 로그출력

Logger.addLogAdapter(new AndroidLogAdapter() {
@Override public boolean isLoggable(int priority, String tag) {
return BuildConfig.DEBUG;
}
});

로그필터적용

Logcat 윈도우오른쪽 상단에의 Edit Filter Configuration을 클릭하여

Log Tag로 PRETTY_LOGGER를 설정하여 깔끔히 PRETTY_LOGGER에서 발생시키는 이벤트만 볼 수 있습니다. 로그를 찍어줄때 태그값도 함께 적용하면 해당 태그값만 모아볼 수 있으며 저는 OKHttp에서 발생하는 태그에 OKHTTP문자열로 설정하였는데 이경우 PRETTY_LOGGER-OKHTTP를 입력해주시면 됩니다.

OkHttp에서 사용할경우

로그메세지만 출력할경우

기존 HttpLoggingIntercpetor를 이용하여 로그를 출력해주면 쉽게 적용할 수 있습니다.

JSON포맷까지 출력하고 싶은경우

HttpLoggingInterceptor코드를 살펴보며 느낀결과 JSON까지 매끄럽게 설정해주기 위해서는 새로운 Interceptor를 만들어주어야합니다(….) 그래서 필자는 우선 임시방편으로 아래와같이 적용하였습니다. (좋은 방법은 아닙니다..)

위 방법의 문제점

  • Header와 StatusCode 같은 내용도 JSON체크를 실시함
  • Body 문자열이 길어질경우 로그를 끊어서 출력하는데 이 경우 정상적인 JSON이라도 JSON foramt으로 인식이 안됨

장점

  • 빠르게 도입이 가능(기술부채)

마치며

좋은 로그는 개발자의 발암확률을 성공적으로 낮춰준다는걸 다시한번 깨달을 수 있었습니다. 기존에 Timber나 여타 다른 로그와도 쉽게 적용 가능하고 특히 Junit을 이용해서 테스트를할때 로그를 봐야할경우 유용하게 써먹을 수 있습니다.

--

--

Harry The Great
해리의 유목코딩

Android & IOS Developer 😀 미디움 이외에 스니펫이나 디버그노트로 활용하는 https://www.harrymikoshi.com/ 블로그도 운영하고있습니다.