Преобразование трассировки стека в строку в 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.