[java] 스택 추적을 문자열로 변환하려면 어떻게해야합니까?

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());