반응형
개발하는 과정에서 빠질수 없는 디버깅에 한 방법으로 로그 출력을 주로 사용하고 있습니다.
기본적으로 로그는 Log.d(String tag, String msg)를 사용해 태그와 메세지를 출력합니다.
일반적인 로그를 사용하면 시스템 로그들과의 구분이 어려워 디버깅이 원활하지 않습니다. 하지만 '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
}
}
}
}
적용예시
어떤 클래스의 어떤 메소드에서 호출됐는지도 알수 있으며, 파란색으로된 클래스명을 클릭하면 출력되는 곳으로 이동합니다.
해당 라이브러리 외 기본적으로 사용하면 편리한 내용들을 조금씩 정리할 생각입니다. 아래 포스팅도 참고해주세요!
※해당 포스팅은 지극히 주관적인 내용으로 저자의 복기 목적으로 작성된 것이고, 내용에대해 수정이나 추가 요청은 언제든 환영합니다.
반응형
'안드로이드 > 라이브러리 추천' 카테고리의 다른 글
[AOS] Paging3 적용하기 (0) | 2023.03.16 |
---|---|
[AOS] Dagger Hilt - DI (0) | 2021.12.10 |
[And] Flexbox 라이브러리로 가변적인 UI 구현 - 라이브러리 추천 (0) | 2021.03.03 |