Я буду использовать ExceptionUtils#getFullStackTrace из jakarta commons lang
Throwable.getStackTrace
возвращает массив StackTraceElement
с, следовательно, метод toString
возвращает текстовое представление самого массива.
Для того, чтобы на самом деле получить информацию о трассировке стека, нужно пройти через каждый StackTraceElement
, чтобы получить больше информации.
Точный ответ на ваш вопрос заключается в том, что вы должны вызывать 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, вы теряете много, не используя встроенную обработку исключений.
Вы попробовали?
private void _showErrorMessage(Exception e) {
log.error("Hey! got an exception", e);
}
Вы также можете посмотреть на библиотеки Guava от Google.
Throwables.getStackTraceAsString(Throwable throwable)
Ваша среда ведения журнала должна иметь возможность регистрировать исключения, поэтому просто передавайте исключение в соответствующий .error (Object, Throwable)
вызова должно быть достаточно:
java.util.logging
может сделать это сделайте это, или вам понадобится трассировка стека в String
по любой другой причине, тогда это станет немного сложнее. Вам нужно будет создать PrintWriter
, обертывающий StringWriter
, и вызвать .printStackTrace ()
в Exception
:
StringWriter sw = new StringWriter();
ex.printStackTrace(new PrintWriter(sw));
String stacktrace = sw.toString();