Это именно то, что происходит, используя метод getStackTrace :
Обеспечивает программный доступ к информации трассировки стека, напечатанной printStackTrace (). Возвращает массив элементов трассировки стека, каждый из которых представляет один кадр стека. Нулевой элемент массива (при условии, что длина массива не равна нулю) представляет вершину стека, что является последним вызовом метода в последовательности . Как правило, это точка, в которой этот бросаемый объект был создан и брошен. Последний элемент массива (при условии, что длина массива не равна нулю) представляет основание стека, которое является первым вызовом метода в последовательности.
Обратите внимание, что порядок, в котором вы нуждаетесь, абсолютно противоположен (см. Жирную часть)
Так что вы можете сделать что-то вроде
StackTraceElement[] elements = exception.getStackTrace();
for (int i = elements.length() - 1; i >= 0; i--) {
System.out.println(elements[i].getMethodName());
}
Вам нужно только добавить несколько шаблонов, чтобы получить именно то, что вам нужно.
Обратите внимание, что печати (или экспорта) только имени метода недостаточно, поскольку обычно у вас есть стек, перемещающийся по разным классам, поэтому лучше распечатать имя класса и имя метода. Но для более крупных методов полезно также знать, в какой строке это произошло, так что ... почему бы не использовать простой exception.printStackTrace()
, который делает именно то, что вам нужно?