Как отобразить отслеживание стека на перехваченной исключительной ситуации?

25
задан ufk 11 February 2010 в 15:37
поделиться

6 ответов

Я буду использовать ExceptionUtils#getFullStackTrace из jakarta commons lang

12
ответ дан 28 November 2019 в 17:39
поделиться

Throwable.getStackTrace возвращает массив StackTraceElement с, следовательно, метод toString возвращает текстовое представление самого массива.

Для того, чтобы на самом деле получить информацию о трассировке стека, нужно пройти через каждый StackTraceElement, чтобы получить больше информации.

5
ответ дан coobird 28 November 2019 в 17:39
поделиться

Точный ответ на ваш вопрос заключается в том, что вы должны вызывать Log4J следующим образом:

private void _showErrorMessage(Exception e) {
    log.error(e.getClass() + ": " +  e.getMessage() + ": " + e.getCause(), e);
}

Хотя я бы отказался от вызова e.getCause (), потому что трассировка стека в любом случае даст вам это, Итак:

private void _showErrorMessage(Exception e) {
    log.error(e.getClass() + ": " +  e.getMessage(), e);
}

ExceptionUtils - это нормально, если вам действительно нужна строка трассировки стека, но, поскольку вы используете Log4J, вы теряете много, не используя встроенную обработку исключений.

1
ответ дан Yishai 28 November 2019 в 17:39
поделиться

Вы попробовали?

private void _showErrorMessage(Exception e) {
    log.error("Hey! got an exception", e);
}
14
ответ дан 28 November 2019 в 17:39
поделиться

Вы также можете посмотреть на библиотеки Guava от Google.

Throwables.getStackTraceAsString(Throwable throwable)

4
ответ дан 28 November 2019 в 17:39
поделиться

Ваша среда ведения журнала должна иметь возможность регистрировать исключения, поэтому просто передавайте исключение в соответствующий .error (Object, Throwable) вызова должно быть достаточно:

сделайте это, или вам понадобится трассировка стека в String по любой другой причине, тогда это станет немного сложнее. Вам нужно будет создать PrintWriter , обертывающий StringWriter , и вызвать .printStackTrace () в Exception :

StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();
68
ответ дан 28 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: