Получить подробные сообщения о цепных исключениях Java
Я хотел бы знать, как я мог бы подготовить окончательный Exception
, содержащий подробное сообщение со всеми подробными сообщениями о нескольких закодированных исключениях.
Например, предположим, что такой код:
try {
try {
try {
try {
//Some error here
} catch (Exception e) {
throw new Exception("FIRST EXCEPTION", e);
}
} catch (Exception e) {
throw new Exception("SECOND EXCEPTION", e);
}
} catch (Exception e) {
throw new Exception("THIRD EXCEPTION", e);
}
} catch (Exception e) {
String allMessages = //all the messages
throw new Exception(allMessages, e);
}
Меня не интересует полный stackTrace
, но только в сообщениях, которые я написал. Я хочу сказать, что я хотел бы получить такой результат:
java.lang.Exception: THIRD EXCEPTION + SECOND EXCEPTION + FIRST EXCEPTION
Ответы
Ответ 1
Я думаю, что вам нужно:
public static List<String> getExceptionMessageChain(Throwable throwable) {
List<String> result = new ArrayList<String>();
while (throwable != null) {
result.add(throwable.getMessage());
throwable = throwable.getCause();
}
return result; //["THIRD EXCEPTION", "SECOND EXCEPTION", "FIRST EXCEPTION"]
}
Ответ 2
вы можете лучше использовать его таким образом, объедините message()
предыдущего Exception
с message()
нового Exception
, вы throw
ing:
} catch (Exception e) {
throw new Exception("FIRST EXCEPTION" + e.getMessage(), e);
}
Ответ 3
Проведите цикл по причине исключения и добавьте сообщение в каждом исключении.
try
{
try
{
try
{
try
{
throw new RuntimeException("Message");
}
catch (Exception e)
{
throw new Exception("FIRST EXCEPTION", e);
}
}
catch (Exception e)
{
throw new Exception("SECOND EXCEPTION", e);
}
}
catch (Exception e)
{
throw new Exception("THIRD EXCEPTION", e);
}
}
catch (Exception e)
{
String message = e.getMessage();
Throwable inner = null;
Throwable root = e;
while ((inner = root.getCause()) != null)
{
message += " " + inner.getMessage();
root = inner;
}
System.out.println(message);
}
Какая печать
ТРЕТЬЕ ИСКЛЮЧЕНИЕ ВТОРОЕ ИСКЛЮЧЕНИЕ ПЕРВОЕ ИСКЛЮЧЕНИЕ Сообщение
Ответ 4
Вы можете просто добавить предыдущее сообщение исключения в каждом исключении
Это пример:
public static void main(String[] args) {
try {
try {
try {
try {
throw new Exception();
// Some error here
} catch (Exception e) {
throw new Exception("FIRST EXCEPTION", e);
}
} catch (Exception e) {
Exception e2 = new Exception("SECOND EXCEPTION + " + e.getMessage());
throw e2;
}
} catch (Exception e) {
Exception e3 = new Exception("THIRD EXCEPTION + " + e.getMessage());
throw e3;
}
} catch (Exception e) {
System.out.println(e);
}
}
Результат: java.lang.Exception: ТРЕТЬЕ ИСКЛЮЧЕНИЕ + ВТОРОЕ ИСКЛЮЧЕНИЕ + ПЕРВЫЙ ИСКЛЮЧЕНИЕ