Получить подробные сообщения о цепных исключениях 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: ТРЕТЬЕ ИСКЛЮЧЕНИЕ + ВТОРОЕ ИСКЛЮЧЕНИЕ + ПЕРВЫЙ ИСКЛЮЧЕНИЕ