티스토리 뷰

반응형

개발을 하다보면 필수인 로그!!

오늘은 안드로이드 로그 꿀팁을 여러분에게 공유 해드리고자 합니다.


개발자들의 문제 분석에 많은 도움이 되는 로그, 로그가 없는 개발은 상상한 적이 없습니다.

하지만 과도한 로그 사용은 성능문제와 함께 오히려 로그 분석이 더 어려워질 수 있습니다.


▲개발자의 친구 로그


그래서 보통은 클래서 내부에 flag를 두고 on/off하여 사용하는데요.
이 경우 문제점은 정적으로 flag값이 쓰여졌기 때문에 로그를 껐다가 다시 켜고 싶은 경우 혹은 그 반대의 경우에 다시 앱을 빌드하여 실행해야 하는 불편함이 발생합니다.

public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource 
{ 
    private static final boolean DBG = false; /** @hide */ 
    public static boolean DEBUG_DRAW = false; 
    중략... 
} 


android framework의 View class에서 발췌해왔는데요, 바로 위와 같이 쓰입니다.
 
사용하는 법은 예상하는 바와 같이 아래와 같습니다.

if (DBG) {
    System.out.println(this + " requestFocus()");
}


그런데 로그를 끄고 켤 때마다 빌드하는게 너무 불편합니다. 그리고 개발자는 게으르죠.(죄송합니다. 저만 게으릅니다😂😭😢) 

그래서 apk 빌드없이 adb command를 이용한 좀 더 게으름 피울수 있는 방법을 알려드리겠습니다.

바로 바로 persist property를 이용하는 것입니다.
persist 는 지워지지 않고 계속 유지 되는 값을 의미합니다. 일반적인 property는 한번 write 한 후에 재부팅시 이전에 쓰여졌던 값은 지워지게 됩니다. 그래서 안드로이드에서 특별한 property를 만들어 두었는데요. 그게 바로 persist property입니다.

그럼 값을 써야겠죠? 값을 쓰는 방법은 아래와 같습니다.

adb shell setprop persist.sys.test.debug 1

여러분들은 test.debug 대신 사용하고 싶은 property명을 적어주시면 됩니다.
자, 그럼 값을 썼으면 읽어봐야겠죠?
바로 이렇게 읽어볼 수 있습니다.

adb shell getprop persist.sys.test.debug

1


출력 값으로 이전에 설정한 1이 출력되는것을 확인 할 수 있습니다.

이제 우리는 저 property값만 코드에서 읽어와서 로그를 뿌릴지 말지를 정해주면 되겠죠?

Reflection을 썼는데요. 아래 코드에서 test.debug 부분만 여러분이 하고 싶은 property명으로 바꿔주시면 그대로 사용할 수 있습니다.

public static int getDebugLevel() {
    try { 
        Class clazz = Class.forName("android.os.SystemProperties"); 
        Method md = clazz.getMethod("getInt", String.class, int.class); 
        return (Integer) md.invoke(clazz, "persist.sys.test.debug", 0); 
    } catch (Exception e) { 
        e.printStackTrace(); return 0; 
    } 
}



저는 값이 0일 때는 로그 off, 그 외 값일 때는 on으로 사용하였습니다.

이제 adb shell에서 아래 명령만으로 로그를 켜고 끌 수 있게 되었습니다.
adb shell setprop persist.sys.test.debug 1
adb shell setprop persist.sys.test.debug 0

이제 로그 on/off 때 마다 빌드를 할 필요가 없어졌습니다. 만세!!! 더 게을러 질 수 있습니다!


값을 읽어 그 값에 따라 로그뿐만 아니라 onDraw에서 디버깅용 path를 그린다던지 없던 버튼을 보이게 한다던지 다양하게 응용해서 쓸 수 있습니다.

그럼 오늘 포스팅을 마치겠습니다.
감사합니다.


반응형
댓글
공지사항
최근에 올라온 글