Если поместить это в действии контроллера:Почему Грайль лишает моих исключений?
def inner = new RuntimeException("inner")
def middle = new Exception("middle", inner)
def outer = new IllegalArgumentException("outer", middle)
throw outer
ошибка отладки страницы Grails' (и самое главное, журналы) покажет только внутренний класс исключений и его сообщение:
Ошибка 500 : Internal Server Error
URI:/...
Класс: java.lang.RuntimeException
Сообщение: внутреннего
Это проблематично, потому что, когда вы выбираете, чтобы обернуть исключение с более описательным сообщением, в большинстве случаев это внешнее сообщение, что более важно при отладке проблемы.
На самом деле было бы полезно иметь все исключения в цепочке причин с их именем класса, трассировкой сообщений и стека, как это делает обычная Java.
Я пробовал самостоятельно распечатать исключение на странице ошибки, но удаление происходит до вызова ошибки.
Есть ли параметр конфигурации, который может изменить это поведение?
Редактировать: У меня есть posted a bug и started a mailing list thread, но до сих пор я не нашел обходного пути и даже места в исходном коде Grails, где происходит эта зачистка.
Nope. Это делает stacktrace намного дольше, но верхнее сообщение по-прежнему остается «внутренним», а не «внешним». – Tobia