Преобразование stack trace в строку на Java — StringWriter и PrintWriter
Иногда нужно записать стек вызовов исключения не в консоль, а в строку — например, чтобы отправить в лог-файл или по сети. В Java для этого используют связку StringWriter и PrintWriter.
Чтобы понять этот пример, нужно знать:
Строки в Java
Обработка исключений в Java
Пример: преобразование stack trace в строку
import java.io.PrintWriter;
import java.io.StringWriter;
public class PrintStackTrace {
public static void main(String[] args) {
try {
int division = 0 / 0;
} catch (ArithmeticException e) {
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String exceptionAsString = sw.toString();
System.out.println(exceptionAsString);
}
}
}
Вывод:
java.lang.ArithmeticException: / by zero
at PrintStackTrace.main(PrintStackTrace.java:9)
В этой программе мы намеренно вызвали ArithmeticException делением 0 на 0. В блоке catch мы создаём StringWriter и PrintWriter, которые принимают любой текстовый вывод и направляют его в строку. Метод printStackTrace() исключения «печатает» стек вызовов в наш PrintWriter, после чего мы получаем результат через toString().
Совет
Этот приём полезен для логирования: вместо e.printStackTrace() в консоль вы можете отправить полученную строку в файл, базу данных или систему мониторинга.