Преобразование трассировки стека в строку в Java

Преобразование трассировки стека в строку в Java

1. Вступление

При работе с исключениями в Java мы часто регистрируем или просто отображаем трассировку стека. Однако иногда нам не нужно просто распечатывать трассировку стека, нам может потребоваться записать трассировку стека в файл, в базу данных или даже передать ее по сети.

Для этих целей было бы очень полезно иметь трассировку стека какString. И, к сожалению, Java не предоставляет удобного метода для этого напрямую.

2. Преобразование с помощью Core Java

Начнем с основной библиотеки.

ФункцияprintStackTrace() классаException может принимать один параметр, либоPrintStream, либоPrintWriter. Таким образом, можно, используяStringWriter, распечатать трассировку стека вString:

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);

Затем вызовsw.toString() вернет трассировку стека какString.

3. Преобразование с помощью Commons-Lang

Хотя предыдущий метод является самым простым способом преобразования трассировки стека вString с использованием ядра Java, он остается немного громоздким. К счастью,Apache Commons-Lang предоставляет функцию, выполняющую эту работу.

Apache Commons-Lang - очень полезная библиотека, предлагающая множество функций, отсутствующих в основных классах Java API, включая классы, которые можно использовать для работы с исключениями.

Во-первых, давайте начнем с конфигурации проекта. При использовании Maven нам просто нужно добавить следующую зависимость кpom.xml:


    org.apache.commons
    commons-lang3
    3.5

Затем, в нашем случае, наиболее интересным классом являетсяExceptionUtils, который предоставляет функции для управления исключениями. Используя этот класс, получить трассировку стека какString изException довольно просто:

String stacktrace = ExceptionUtils.getStackTrace(e);

4. Заключение

Получить трассировку стека исключения в видеString несложно, но это далеко не интуитивно. В этой статье представлены два способа сделать это, используя ядро ​​Java или Apache Commons-Lang.

Имейте в виду, что в Java 9 появится новыйStackWalking API, который должен упростить задачу.

Как всегда, образцы кода можно найтиhere on GitHub.