Jeśli umieścisz to w akcji kontrolera:Dlaczego Grails usuwa moje wyjątki?
def inner = new RuntimeException("inner")
def middle = new Exception("middle", inner)
def outer = new IllegalArgumentException("outer", middle)
throw outer
stronie błąd debugowania Grails' (i, co najważniejsze, dzienniki) pokaże tylko wewnętrzną klasę wyjątku i swoją wiadomość:
Error 500 : Serwer wewnętrzny błąd
URI:/...
Klasa: java.lang.RuntimeException
Wiadomość: wewnętrzna
Jest to problematyczne, ponieważ jeśli zdecydujesz się owinąć wyjątek z komunikatem bardziej opisową, w większości przypadków jest to zewnętrzna wiadomość, że ważniejsze jest w debugowania problemu.
Właściwie, byłoby użyteczne mieć wszystkie wyjątki w łańcuchu przyczyn, z ich nazwą klasy, komunikatem i śledzeniem stosu, tak jak robi to zwykła Java.
Próbowałem już sam wydrukować wyjątek na stronie błędu, ale usuwanie jest wykonywane przed wywołaniem widoku błędu.
Czy istnieje jakiś parametr konfiguracyjny, który może zmienić to zachowanie?
Edycja: Mam posted a bug i started a mailing list thread, ale do tej pory nie znalazłem obejścia, ani nawet miejsca w kodzie źródłowym Grails, gdzie to zdejmuje się.
Nie. To sprawia, że stacktrace znacznie dłużej, ale górna wiadomość jest nadal "wewnętrzna" zamiast "zewnętrzna". – Tobia