Se si mette questo in un azione di controllo:Perché Grails elimina le mie eccezioni?
def inner = new RuntimeException("inner")
def middle = new Exception("middle", inner)
def outer = new IllegalArgumentException("outer", middle)
throw outer
pagina di errore di debug Grails' (e, soprattutto, i registri) mostreranno solo la classe eccezione interna e il suo messaggio:
Errore 500 : Internal Server Error
URI:/...
Classe: java.lang.RuntimeException
Messaggio: interno
Questo è problematico, perché quando si sceglie di avvolgere un'eccezione con un messaggio più descrittivo, la maggior parte delle volte è il messaggio esterno che è più importante per il debug del problema.
In realtà, sarebbe utile avere tutte le eccezioni nella catena delle cause, con il nome della classe, il messaggio e la traccia dello stack, proprio come fa il normale Java.
Ho provato a stampare l'eccezione nella pagina di errore, ma lo spoglio avviene prima che venga richiamata la vista di errore.
Esiste un parametro di configurazione da qualche parte che può modificare questo comportamento?
Modifica: ho posted a bug e started a mailing list thread, ma finora non ho trovato una soluzione alternativa, né nemmeno il posto nel codice sorgente di Grails in cui avviene questo spoglio.
No. Rende lo stacktrace molto più lungo, ma il messaggio principale è ancora "interno" anziché "esterno". – Tobia