2016-07-15 4 views
0

나는 (디버그 빌드에서) 디버그 로그의 팬이며, 커스텀 로거 클래스를 개선하고 싶다. 이상적으로는 호출 클래스 이름, 메소드 이름 및 매개 변수 값을 기록하는 기본 메소드를 작성하려고합니다.안드로이드 자동 로딩

예를 들어, "MainActivity"클래스의 "MyApplication"응용 프로그램이 있고 매개 변수 "bar"를 사용하여 "foo"메서드를 호출한다고 가정 해보십시오. 나는 로그 캣이 같은 것을보고 싶다 : 수동으로 모든 값을 전달하지 않고이 정보를 얻기의 방법

D/MyApplication MainActivity foo("bar")

있습니까? 필자는 java.lang.invoke.MethodHandles와 같은 Java 지원 메소드를 언급하는 기사를 보았지만 Android 지원 메소드에 대해서는 언급하지 않았습니다. 매개 변수를 전달해야하지만 클래스 이름과 메서드 이름을 자동화하는 것이 좋습니다.

답변

2

Thread.currentThread().getStackTrace()을 호출하면 현재 스레드의 StackTraceElement을 얻을 수 있습니다. getClassName(), getMethodName()getLineNumber()을 호출하여 클래스, 메소드 및 코드 행을 인쇄 할 수 있습니다. 그것은 코드에서 이와 같이 보일 것입니다.

StackTraceElement ste = Thread.currentThread().getStackTrace()[0]; 
String msg = ste.getClassName() + "." + ste.getMethodName() + ":" + ste.getLineNumber(); 
+0

감사 @ChrisStillwell, 나는 이와 같은 답변을 볼 수 있고, 내 질문에 포함되어 있어야합니다. 내 질문에 [3]은 무엇을 나타냅니다? 나는 [0]과 [1]로 답을 보았지만 어떤 스택 추적 요소가 신뢰할 수 있는지 알지 못합니다. – lgdroid57

+0

'[3]'이 (가) 내 프로젝트에서 사용할 수있는 라이브러리에서 붙여 넣기했기 때문입니다. 기본적으로'getStackTrace()'는'StackTraceElement'의 배열을 반환합니다. 배열의 맨 위가 스택 추적 (stacktrace)의 최상위 위치입니다. 배열을 통해 전체 추적을 반복하려면 전체 호출 계층 구조를 가져옵니다. 예외가 throw 될 때 얻을 수있는 스택 추적과 동일합니다. – ChrisStillwell

+0

기본적으로'SomeMethod()'의 줄 15에 예외를 던지면 stacktrace는 줄에서'Thread.currentThread(). getStackTrace()'를 호출하면 인쇄 할 수있는 것과 동일합니다 'SomeMethod()'에서 15. – ChrisStillwell