본문 바로가기

안드로이드/라이브러리 추천

[안드로이드/Android] 로그 이쁘게 출력하기

반응형

개발하는 과정에서 빠질수 없는 디버깅에 한 방법으로 로그 출력을 주로 사용하고 있습니다.

기본적으로 로그는 Log.d(String tag, String msg)를 사용해 태그와 메세지를 출력합니다.

Log.d("로그 태그", '로그 메세지")를 출력한 결과

일반적인 로그를 사용하면 시스템 로그들과의 구분이 어려워 디버깅이 원활하지 않습니다. 하지만 'logger' 라이브러리를 사용하면 보다 편리하게 디버깅을 할 수 있습니다.

 

사용법

gradle(.app)

implementation 'com.orhanobut:logger:2.2.0'

L.java

'L'은 로그를 사용하기 위해 만든 유틸 클래스 입니다.

Logger.addLogAdapter(AndroidLogAdapter(formatStrategy))

일반적인 로그와 같이 d,e,w,v,i 모두 제공합니다.

Logger.d("debug")
Logger.e("error")
Logger.w("warning")
Logger.v("verbose")
Logger.i("information")

해당 라이브러리를 사용하실때 유틸성 클래스 생성하시고 디버그 모드일때만 출력되도록 설정하면 보다 편리하게 사용하실 수 있습니다.

class L {
    companion object {
        private const val PRINT_LOG = BuildConfig.DEV// 로그 출력 ㅕㅇ부
        private const val LOG_TAG = "plantBreed"// 로그 태그
        private var isInit = false // 초기화 여부


        fun e(log :String?){
            if(PRINT_LOG){
                init()
                Logger.e(log ?: "null")
            }
        }

        fun d(log :String?){
            if(PRINT_LOG){
                init()
                Logger.d(log ?: "null")
            }
        }

        /**
         * json 문자열을 포맷팅 하여 보여준다
         */
        fun js(log :String?){
            if(PRINT_LOG){
                init()
                Logger.json(log ?: "null")
            }
        }

        /**
         * xml 문자열을 포맷팅하여 보여준다
         */
        fun xml(log :String?){
            if(PRINT_LOG){
                init()
                Logger.xml(log ?: "null")
            }
        }



        private fun init() {
            if (!isInit) {
                val formatStrategy = PrettyFormatStrategy.newBuilder()
                    .logStrategy(LogStrategy { priority, tag, message ->
                        var last = (10 * Math.random()).toInt()

                        fun randomKey(): String {
                            var random = (10 * Math.random()).toInt()

                            if (random == last) {
                                random = (random + 1) % 10
                            }
                            last = random

                            return random.toString()
                        }

                        Log.println(priority, randomKey() + tag, message)
                    })
                    .tag(LOG_TAG)// 로그 태그
                    .methodOffset(1)// 메소드 노출 인덱스
                    .methodCount(2)// 메소드 노출 개수
                    .build()


                Logger.addLogAdapter(AndroidLogAdapter(formatStrategy))
                isInit = true
            }
        }
    }

}

 

적용예시

어떤 클래스의 어떤 메소드에서 호출됐는지도 알수 있으며, 파란색으로된 클래스명을 클릭하면 출력되는 곳으로 이동합니다.

 

해당 라이브러리 외 기본적으로 사용하면 편리한 내용들을 조금씩 정리할 생각입니다. 아래 포스팅도 참고해주세요!

프로젝트 설정팁

 

[안드로이드/Android] 프로젝트 설정 팁

새로운 프로젝트나 이미 진행되고 있는 프로젝트에 유용한 설정 및 기타 정보들을 공유하고, 지속적으로 업데이트를 하겠습니다. 1. ADB idea ( 포스팅 링크 ) adb 옵션들을 빠르고 편리하게 사용할 수 있도록 해..

superwony.tistory.com

 

 

해당 포스팅은 지극히 주관적인 내용으로 저자의 복기 목적으로 작성된 것이고, 내용에대해 수정이나 추가 요청은 언제든 환영합니다. 

 

 

 

 

반응형