1. Введение
При работе с исключениями в Java мы часто регистрируем или просто отображаем следы стеков. Однако иногда мы не хотим просто распечатать след стека, нам может понадобиться записать след стека в файл, в базу данных или даже передать его по сети.
Для этих целей, имея стек след в качестве Струнные было бы очень полезно. И, к сожалению, Java не предоставляет очень удобный способ сделать это напрямую.
2. Преобразование с core Java
Начнем с основной библиотеки.
Функция РаспечататьСтакТрайс () из Исключение класс может занять один параметр, либо РаспечататьСтрим или РаспечататьПисач . Таким образом, можно, используя СтрингРайтер , чтобы распечатать след стека в Струнные :
StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw);
Затем, позвонив sw.toString () вернет след стека в качестве Струнные .
3. Преобразование с Commons-Lang
В то время как предыдущий метод является самым простым способом преобразования трассировки стека в Струнные используя ядро Java, он остается немного громоздким. К счастью, Апач Викисклад-Ланг предоставляет функцию, делая работу.
Apache Commons-Lang – это очень полезная библиотека, предлагающая множество функций, которые отсутствуют в основных классах Java API, включая классы, которые могут быть использованы для работы с исключениями.
Во-первых, давайте начнем с конфигурации проекта. При использовании Maven, мы просто должны добавить следующую зависимость к пом.xml :
org.apache.commons commons-lang3 3.11
Тогда, в нашем случае, самый интересный класс ИсключениеУтилс , который предоставляет функции для управления исключениями. Используя этот класс, получить след стека в качестве Струнные от Исключение довольно проста:
String stacktrace = ExceptionUtils.getStackTrace(e);
4. Заключение
Получение стека след исключения в качестве Струнные не трудно, но это далеко не интуитивно. В этой статье представлены два способа сделать это, либо с помощью ядра Java или с помощью Apache Commons-Lang.
Имейте в виду, что Java 9 принесет новый API StackWalking, который должен сделать вещи проще.
Как всегда, образцы кода можно найти здесь, на GitHub .