Logger로 안드로이드 로그향상하기
더 쉽고빠른 로그정보!
최근 항상 하던방식으로 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을 이용해서 테스트를할때 로그를 봐야할경우 유용하게 써먹을 수 있습니다.