Throwable.getStackTrace()
스택 트레이스를 나타내는 문자열로 결과를 변환하는 가장 쉬운 방법은 무엇입니까 ?
답변
다음 방법을 사용하여 Exception
스택 추적을 로 변환 할 수 있습니다 String
. 이 클래스는 많이 사용되는 오픈 소스가있는 가장 일반적인 종속 라이브러리 인 Apache commons-lang으로 제공됩니다.
org.apache.commons.lang.exception.ExceptionUtils.getStackTrace(Throwable)
답변
Throwable.printStackTrace(PrintWriter pw)
스택 추적을 적절한 기록기에 보내려면 사용하십시오 .
import java.io.StringWriter;
import java.io.PrintWriter;
// ...
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String sStackTrace = sw.toString(); // stack trace as a string
System.out.println(sStackTrace);
답변
이것은 작동해야합니다 :
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String exceptionAsString = sw.toString();
답변
Android 용으로 개발하는 경우 훨씬 쉬운 방법은 다음을 사용하는 것입니다.
import android.util.Log;
String stackTrace = Log.getStackTraceString(exception);
형식은 getStacktrace와 동일합니다. 예를 들어
09-24 16:09:07.042: I/System.out(4844): java.lang.NullPointerException 09-24 16:09:07.042: I/System.out(4844): at com.temp.ttscancel.MainActivity.onCreate(MainActivity.java:43) 09-24 16:09:07.042: I/System.out(4844): at android.app.Activity.performCreate(Activity.java:5248) 09-24 16:09:07.043: I/System.out(4844): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 09-24 16:09:07.043: I/System.out(4844): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162) 09-24 16:09:07.043: I/System.out(4844): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 09-24 16:09:07.043: I/System.out(4844): at android.app.ActivityThread.access$800(ActivityThread.java:139) 09-24 16:09:07.043: I/System.out(4844): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 09-24 16:09:07.043: I/System.out(4844): at android.os.Handler.dispatchMessage(Handler.java:102) 09-24 16:09:07.043: I/System.out(4844): at android.os.Looper.loop(Looper.java:136) 09-24 16:09:07.044: I/System.out(4844): at android.app.ActivityThread.main(ActivityThread.java:5097) 09-24 16:09:07.044: I/System.out(4844): at java.lang.reflect.Method.invokeNative(Native Method) 09-24 16:09:07.044: I/System.out(4844): at java.lang.reflect.Method.invoke(Method.java:515) 09-24 16:09:07.044: I/System.out(4844): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 09-24 16:09:07.044: I/System.out(4844): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
답변
구아바의 Throwables
수업
실제 Throwable
인스턴스 가있는 경우 Google Guava는를 제공합니다 Throwables.getStackTraceAsString()
.
예:
String s = Throwables.getStackTraceAsString ( myException ) ;
답변
경고 : 원인을 포함하지 않습니다 (일반적으로 유용한 비트입니다).
public String stackTraceToString(Throwable e) {
StringBuilder sb = new StringBuilder();
for (StackTraceElement element : e.getStackTrace()) {
sb.append(element.toString());
sb.append("\n");
}
return sb.toString();
}
답변
나를 위해 가장 깨끗하고 쉬운 방법은 다음과 같습니다.
import java.util.Arrays;
Arrays.toString(e.getStackTrace());