2012-02-22 19 views
9

Potrzebuję zalogować śledzenia stosu, gdy przechwyć wyjątek w mojej aplikacji Java. Wiem, że wyjątki mają wbudowaną metodę printStackTrace() i że mogą wysłać ślad stosu do innego PrintWriter/PrintStream, ale byłoby to przydatne, gdybym mógł pobrać ślad stosu jako String tak, żebym mógł nim manipulować lub wyświetlać w JMessagePane lub coś takiego. Obecnie jedynym sposobem, w jaki muszę to zrobić, jest:Java wysyłania stosu śledzenia do innego strumienia wyjściowego

String stackTrace = ""; 
stackTrace += e.getClass().getName() + ": " + e.getMessage() + "\n"; 

for (StackTraceElement elt : e.getStackTrace()) { 
    stackTrace += "\tat " + elt + "\n"; 
} 

Czy jest to czystszy sposób na zrobienie tego?

+1

Warto zauważyć, że metoda 'printStackTrace' ma znacznie więcej funkcji niż sugerowana w treści pytania. Oznacza to, że zawiera on stacktrace dla przyczyny, jeśli jest ustawiony i wyklucza jakiekolwiek "StackTraceElement" z przyczyny, która jest wspólna dla oryginalnego wyjątku, stąd wyrażenie '... more' –

+0

doskonały punkt. To kolejny powód, dla którego chcę bardziej elegancki sposób na zrobienie tego. – ewok

Odpowiedz

20

Jest:

StringWriter writer = new StringWriter(); 
e.printStackTrace(new PrintWriter(writer)); 
String stackTrace = writer.toString(); 
Powiązane problemy