2010-12-03 2 views
77

예외를 throw하는 try/catch 블록이 있으며 Android 장치 로그의 예외에 대한 정보를보고 싶습니다. Android - 로그 할 전체 예외 백스트레스 인쇄

나는 내 개발 컴퓨터에서이 명령을 사용하여 모바일 장치의 로그를 읽어

try { 
    // code buggy code 
} catch (Exception e) 
{ 
    e.printStackTrace(); 
} 

하지만 그 로그에 아무것도 인쇄되지 않습니다

/home/dan/android-sdk-linux_x86/tools/adb shell logcat 

내가이 첫 번째 시도했다. 그것이 많은 도움이 되었기 때문에 그것은 유감스러운 일입니다.

내가 달성 한 가장은 다음과 같습니다

try { 
    // code buggy code 
} catch (Exception e) 
{ 
    Log.e("MYAPP", "exception: " + e.getMessage());    
    Log.e("MYAPP", "exception: " + e.toString()); 
} 

없는 것보다는 더 나은하지만 매우 만족하지.

전체 백 트레이스를 로그에 인쇄하는 방법을 알고 있습니까?

감사합니다.

답변

133
try { 
    // code that might throw an exception 
} catch (Exception e) { 
    Log.e("MYAPP", "exception", e); 
} 
+1

또한 내 스타일 : Log.e (e.getClass(). getName(), e.getMessage(), e); – Vikas

+22

e.getMessage()를 사용하여 조심하십시오. getMessage()는 발생 된 예외의 유형에 따라 null을 반환 할 수 있습니다. null은 Log 메소드의 메시지 매개 변수로 지원되지 않으므로 자체적으로 예외가 발생합니다. 또한 [here] (http://developer.android.com/reference/java/lang/Throwable.html#getMessage%28%29) – Uniqe

+0

을 참조하십시오. 두 번째 클래스에서이 예외가 발생한 코드의 종류를 설명하는 것이 더 의미가 있습니다 매개 변수. 메시지는 이미 출력에 포함되어 있습니다. – EboMike

7
catch (Exception e) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    PrintStream stream = new PrintStream(baos); 
    e.printStackTrace(stream); 
    stream.flush(); 
    Log.e("MYAPP", new String(baos.toByteArray()); 
} 

또는 ... 나중에 알고 ... EboMike는 말.

+1

가장 창의적인 해결책 :) – EboMike

2

e.printStackTrace()가 나에게 그것을 인쇄합니다. 나는 당신이 logcat을 올바르게 달리고 있다고 생각하지 않는다. 단지

/home/dan/android-sdk-linux_x86/tools/adb logcat

33

예외의 Throwable 때문에이 도우미 함수도 좋은 일을 실행, 쉘에서 실행하지 마십시오.

try{ 
     //bugtastic code here 
    } 
    catch (Exception e) 
    { 
     Log.e(TAG, "Exception: "+Log.getStackTraceString(e)); 
    } 
+1

코드에서 'TAG'은 무엇입니까? – humanityANDpeace

+0

앱 및 위치를 지정하는 데 사용되는 문자열입니다. 어떤 문자열이 거기에서 할 것입니다. – George

+0

멋진 대답, 받아 들여야합니다 답변 – Hamidreza

1

표준 출력 및 오류 출력은 기본적으로/dev/null로 보내 지므로 모두 손실됩니다. 그런 다음이 출력을 기록하려면 당신은 내가 문자열로 예외를 캐스팅했다 안드로이드의 맥락에서 here

2
public String getStackTrace(Exception e){ 
    StringWriter sw = new StringWriter(); 
    PrintWriter pw = new PrintWriter(sw); 
    e.printStackTrace(pw); 
    return sw.toString(); 
} 
0
try{ 
      ... 
} catch (Exception e) { 
    Log.e(e.getClass().getName(), e.getMessage(), e.getCause()); 
} 
0

을 표시 지침 "표준 출력과 표준 에러보기"를 따라야합니다

try { 
    url = new URL(REGISTRATION_PATH); 
    urlConnection = (HttpURLConnection) url.openConnection(); 
} catch(MalformedURLException e) { 
    Log.i("MALFORMED URL", String.valueOf(e)); 
} catch(IOException e) { 
    Log.i("IOException", String.valueOf(e)); 
}