stderr 이외의 스트림에 예외의 스택 추적을 어떻게 인쇄합니까? 내가 찾은 한 가지 방법은 getStackTrace ()를 사용하고 전체 목록을 스트림에 인쇄하는 것입니다.
답변:
아름답지는 않지만 그럼에도 불구하고 해결책 :
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에 스택 추적이 인쇄됩니다.
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
지정된 스트림 스택 트레이스를 출력하는 것을. 이들 중 하나를 사용해보십시오.
다음과 같은 추가 정보 (패키지 세부 정보)가 포함 된보다 간결한 스택 추적에 관심이있는 경우 :
java.net.SocketTimeoutException:Receive timed out
at j.n.PlainDatagramSocketImpl.receive0(Native Method)[na:1.8.0_151]
at j.n.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:143)[^]
at j.n.DatagramSocket.receive(DatagramSocket.java:812)[^]
at o.s.n.SntpClient.requestTime(SntpClient.java:213)[classes/]
at o.s.n.SntpClient$1.call(^:145)[^]
at ^.call(^:134)[^]
at o.s.f.SyncRetryExecutor.call(SyncRetryExecutor.java:124)[^]
at o.s.f.RetryPolicy.call(RetryPolicy.java:105)[^]
at o.s.f.SyncRetryExecutor.call(SyncRetryExecutor.java:59)[^]
at o.s.n.SntpClient.requestTimeHA(SntpClient.java:134)[^]
at ^.requestTimeHA(^:122)[^]
at o.s.n.SntpClientTest.test2h(SntpClientTest.java:89)[test-classes/]
at s.r.NativeMethodAccessorImpl.invoke0(Native Method)[na:1.8.0_151]
spf4j lib 에서 Throwables.writeTo 를 사용해 볼 수 있습니다 .
getStackTrace
있는StackTraceElement
개체 배열을 반환하는 Trowable (Exception) 메서드를 호출 할 수 있습니다 (해당 개체의 toString 메서드를 사용하여 추적 한 줄을 가져옴).