일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- #리사이클러뷰 어댑터
- 리사이클러뷰 체크박스
- zeplin
- #SMS API #안드로이드 SMS #SMS Retriever
- MVVM
- 메모리릭
- 안드로이드 익명클래스
- #ContentProvider #App DataShare
- 안드로이드 아키텍쳐
- retrofit
- 안드로이드해상도
- retrofit2
- 안드로이드 메모리릭
- #안드로이드 개발자 #안드로이드 신입 #개발자 이직 #안드로이드 면접 #신입 개발자
- 제플린
- 빗버킷 #bitbucket #authorization failed #깃
- 안드로이드
- 클린아키텍쳐
- #android #안드로이드 #glide #gif #이미지다운로드
- 구글맵안돼요
- 레트로핏
- retrofi
- 키스토어
- 사용법
- #안드로이드
- #리사이클러뷰
Archives
- Today
- Total
땀이 삐질삐질 나는 개발 일기
Utils Log 클래스로 간편하게 Log처리하기 본문
안녕하세요. 삐질삐질 개발하는 개발자 삐질입니다.
오늘은 개발을 하면서 매우 간단하지만 귀찮고, 없어서는 않되지만, 일일이 관리하기엔 매우 번거로운
디버깅의 필수 코드 Log에 대해 알아보도록 하겠습니다.
Log는 아래와 같은 Case에 주로 사용합니다.
- Case 1. 해당 단계까지 진입 했는지?
- Case 2. 해당 단계까지 왔다면, 값이 제대로
- Case 3. BreakPoint를 두고 한 단계씩 Debugging 하기에는 번거롭고, 진행 상황을 연속적으로 기록하기 위함
이런 용도로 Log를 사용하기 위해서 우리는 아래와 같은 코드를 사용합니다.
Log.e("Tag","Message");
Log.d("Tag","Message");
Log.i("Tag","Message");
Log.v("Tag","Message");
각 로그 레벨( e, d , i , v)에 관해서는 지금 다루지 않겠습니다.
위 같은 레벨의 로그들을 필요한 위치에 작성 하시겠죠? 하지만 우리는 문제점이 있습니다.
필요에 따라서 로그를 한번에 모두 Not Working 하게 해야하는 경우 매번 코드를 찾아 따라다니며 삭제하기 귀찮죠.
또한 일괄적인 코드레벨의 변경이 필요할때 하나하나 찾아다니면서 관리하기 매우 귀찮음이 발생합니다.
이를 이유로 아래와 같은 Utils Method를 작성하도록 합니다.
public static void Log_e(String tag, String msg) {
Log.e(tag, msg);
}
public static void Log_v(String tag, String msg) {
Log.v(tag, msg);
}
public static void Log_i(String tag, String msg) {
Log.i(tag, msg);
}
public static void Log_d(String tag, String msg) {
Log.d(tag, msg);
}
어떤가요? 내가 특정 레벨의 로그를 출력하지 않았으면 할땐 해당 메서드의 Contents 부를 주석처리해주면 됩니다.
여기까지 이해가 되었다면 또하나의 특수한 경우가 있습니다.
Q. d레벨로 Log를 사용하면 Release때 노출되지 않으니 무조건 d로 하면 되지않냐?
A. 그럼 Release APK의 Debugging이 필요할땐 어떻게 하시겠나요?
이때도 마찬가지로 하나의 조건문을 통해 해결할 수 있습니다.
public static void Log_e(String tag, String msg) {
if (BuildConfig.DEBUG) { //Debug
Log.e(tag, msg);
} else { //Release
Log.e(tag, msg);
}
}
그럼 한번만 더 단계를 추가해보겠습니다.
Q. 그럼 릴리즈에서도 간단하게 상태를 컨트롤 하고 싶다면??
- Gradle(App Level)에 BuildConfig변수를 추가해준다.
- IS_SHOW_LOG같은 플래그를 두어 나는 Release버전에 따라. Gradle의 변수 하나만 수정해줌으로써 로그를 컨트롤 한다
- buildTypes에 release와 debug둘다 명시 ( 반드시 )
buildTypes {
release {
minifyEnabled false
debuggable true
buildConfigField "String", "IS_SHOW_LOG", "\"N\""
}
debug {
buildConfigField "String", "IS_SHOW_LOG", "\"N\""
}
}
public static void Log_e(String tag, String msg) {
if (BuildConfig.DEBUG) { //Debug
Log.e(tag, msg);
} else { //Release
if(BuildConfig.IS_SHOW_LOG.equals("Y")) {
}
else{
Log.e(tag, msg);
}
}
}
이렇게 사용할 수 있습니다. 유용하게 개발하길 바라며 이만 !
안드로이드 초보 개발자를 위해 아래와 같은 카카오 오픈톡을 운영 중입니다.
'개발 Tip' 카테고리의 다른 글
리사이클러뷰 아이템 액티비티로 전달하기 (0) | 2019.07.06 |
---|---|
안드로이드 Service Binding과 StepCount 만보기 (0) | 2019.07.02 |
안드로이드 Zeplin Resolution 팁 알아보기 (0) | 2019.06.22 |
BuildConfig 이용해서 Debug와 Release 모드의 같은 변수 다른 값 사용하기 (0) | 2019.06.14 |
Android 나만의 모듈 만들어 쓰기 (0) | 2019.06.08 |
Comments