[java] 예외의 스택 추적 인쇄

stderr 이외의 스트림에 예외의 스택 추적을 어떻게 인쇄합니까? 내가 찾은 한 가지 방법은 getStackTrace ()를 사용하고 전체 목록을 스트림에 인쇄하는 것입니다.



답변

Throwable.printStackTrace(..)PrintWriter또는 PrintStream인수를 취할 수 있습니다 .

} catch (Exception ex) {
    ex.printStackTrace(new java.io.PrintStream(yourOutputStream));
}

즉, LOGBack 또는 log4j 와 같은 로깅 구현과 함께 SLF4J 와 같은 로거 인터페이스를 사용하는 것이 좋습니다 .


답변

아름답지는 않지만 그럼에도 불구하고 해결책 :

StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter( writer );
exception.printStackTrace( printWriter );
printWriter.flush();

String stackTrace = writer.toString();


답변

인쇄 스트림을 인수로 사용하는 Throwable.printStackTrace ()의 대체 형식이 있습니다. http://download.oracle.com/javase/6/docs/api/java/lang/Throwable.html#printStackTrace(java.io.PrintStream)

catch(Exception e) {
    e.printStackTrace(System.out);
}

그러면 std 오류 대신 std에 스택 추적이 인쇄됩니다.


답변

Android 개발자 미니멀리스트의 경우 : Log.getStackTraceString(exception)


답변

Apache commons는 스택 추적을 throwable에서 문자열로 변환하는 유틸리티를 제공합니다.

용법:

ExceptionUtils.getStackTrace(e)

전체 문서는 https://commons.apache.org/proper/commons-lang/javadocs/api-release/index.html
참조하십시오.


답변

stackTrace를 얻는 데 도움이되는 메서드를 만들었습니다.

private static String getStackTrace(Exception ex) {
    StringBuffer sb = new StringBuffer(500);
    StackTraceElement[] st = ex.getStackTrace();
    sb.append(ex.getClass().getName() + ": " + ex.getMessage() + "\n");
    for (int i = 0; i < st.length; i++) {
      sb.append("\t at " + st[i].toString() + "\n");
    }
    return sb.toString();
}


답변

의 Throwable 클래스라는 두 가지 방법을 제공 printStackTrace하는 하나를 수용 PrintWriter하고 취하는 한 PrintStream지정된 스트림 스택 트레이스를 출력하는 것을. 이들 중 하나를 사용해보십시오.