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?
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' –
doskonały punkt. To kolejny powód, dla którego chcę bardziej elegancki sposób na zrobienie tego. – ewok