2014년 8월 15일 금요일

Logcat 이용시 line number 넣기

로그캣 이용시 에러 메시지는 안드로이드가 내뱉기 때문에 더블클릭시에 해당 소스라인으로 바로 점프가 됩니다.

하지만 저희가 입력하는 로그의 경우 그렇지 못하죠.

그래서 저는 별도의 로그를 만들어서 사용합니다.



public static void toLog(String TAG, String STR) {

Log.i(TAG, STR+"("+lineOut()+")");

}

이렇게 사용하게 되면 제가 원하는 태그와 메시지 그리고 그 메시지 뒤에 라인넘버 정보가 나오게 됩니다. 이 정보를 넣게 되면 더블클릭 했을시에 안드로이가 뱉는 에러 메시지 처럼 바로 소스로 접근이 가능하게 되어서 굉장히 편하죠.

lineOut 이라는 함수가 그 주인공인데 그 내부는 다음과 같습니다.



public static String lineOut() {
   int level = 4;
   StackTraceElement[] traces;
   traces = Thread.currentThread().getStackTrace();
   return (" at "  + traces[level] + " ");
}



현재 Thread 의 StackTraceElement 들을 보면 함수를 호출하는 스택을 가지고 있습니다.
이 스택을 보게 되면 아마 여러분도 대충 감이 오실거라 생각됩니다.


위 메시지는 제가 traces level을 0~4 까지 보았을때의 연속적인 Stack 의 메시지를 출력한 결과입니다.
toLog()라는 메시지는 실제로 onStart 라는 함수에서 불려졌지만 이는 StackTraceElement중 4번째에 해당됩니다.

Thread의 StackTrace는 안드로이드의 핵심인 dalvik에서 관리되고 있습니다.

저의 경우 lineOut이라는 함수가 toLog 함수 안에 다시 포함되어지기 때문에 5번째 스택에 들어있지만 여러분의 기호에 맞게 level 을 설정 하셔서 쓰시면 되겠습니다.

StackTrace문장이 한 로그에 하나의 Element 만 있다면 더블 클릭시에 해당 소스 페이지로 넘어가기 때문에 검색을 하거나 찾을 필요가 없어 굉장히 편리합니다~~

나름 꿀팁이랄까... 수고하세요~

댓글 없음:

댓글 쓰기