Преобразование исключения StackTrace в строку в Java

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

Обратите внимание, что Java не имеет встроенного прямого API для получения трассировки стека в виде строки.

1. Использование StringWriter и PrintWriter

По умолчанию Throwable.printStackTrace() выводит трассировку исключения в стандартный поток ошибок, который является значением поля System.err. По умолчанию System.err выводится на консоль.

Мы можем использовать перегруженный метод printStackTrace(writer) для печати обратной трассировки в указанный print Writer, такой как PrintWriter. Этот PrintWriter нацелен на StringWriter.

Чтобы преобразовать трассировку стека с помощью StringWriter, выполните следующие действия.

  • Распечатать трассировку стека, которую можно вывести, и ее обратную трассировку в PrintWriter.
  • Копировать содержимое средства записи печати в StringWriter.
  • Используйте StringWriter.toString() для получения трассировки стека в виде строки.

Мы используем try-with-resource для создания экземпляров StringWriter и PrintWriter, которые автоматически закрывают оба объекта записи после завершения обработки.

В следующей программе мы создаем исключение NullPointerException и выводим его трассировку стека после преобразования в строку.

NullPointerException npe = new NullPointerException("Custom error");String errorStr = null;try(StringWriter sw = new StringWriter();PrintWriter pw = new PrintWriter(sw)) {npe.printStackTrace(pw);errorStr = sw.toString();} catch(IOException e) {throw new RuntimeException("Error while converting the stacktrace");}System.out.println(errorStr);

Вывод программы.

java.lang.NullPointerException: Custom errorat com.howtodoinjava.demo.StackTrace.main(StackTrace.java:11)

2. Использование ExceptionUtils

В библиотеке Apache common langs3 есть один отличный служебный класс ExceptionUtils. Его метод getStackTrace() возвращает строковое представление любого исключения Java.

2.1.Мавен

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency>

2.2 Пример

Следующая программа Java копирует трассировку стека в строку.

String errorStr = ExceptionUtils.getStackTrace(new NullPointerException("Custom error"));System.out.println(errorStr);

Вывод программы.

java.lang.NullPointerException: Custom errorat com.howtodoinjava.demo.StringExample.main(StringExample.java:11)

Исходный код на Github

Прокрутить вверх