Ni, piu' no che si.
Innanzitutto, ASSIOMA per qualunque applicazione che non sia la classica applicazione di test, NON SI STAMPA MAI direttamente su console, ma si una una libreria per il logging (log4j su tutte, che ha fatto scuola ).
Questo perche', SENZA CAMBIARE UNA VIRGOLA NEL CODICE, di volta in volta puoi stampare su console, file, database, cloud, e qualunque altro posto improbabile in cui ti venga in mente.
Poi, il callstack va stampato in tutte quelle situazioni in cui stai gestendo un'eccezzione non prevista.
Nel senso: se stai cercando di aprire un file non esistente, in un punto del codice in cui SAI che potresti trovarti in questa situazione (perche' lo hai esplicitamente implementato), il callstack e' relativamente inutile.
Invece, se l'eccezzione e' stata generata da un pezzo di codice imprevisto e tu stai semplicemente intercettando tutte le possibili eccezzioni, in un punto che ti assicura che l'applicazione non schianti proprio per la presenza di eccezzioni strane, allora SI CHE TI SERVE avere il callstack, per capire da dove e' partito il problema.
Ora, se mandarlo al client, o semplicemente loggarlo, e' questione delicata, ma neanche tanto: quello che devi assicurarti e' che, in caso di problemi, tu quello stack lo possa ricuperare in qualche modo.
Ad esempio, in un mio web service, nell'XML di risposta, in caso di problemi, scrivo anche il callstack. L'utilizzatore non se ne fa nulla, ma poiche' mi manda l'XML, posso gia' vedere da questo dove puo' essere il problema, e cercare il log corrispondente.
Tieni presente che nel (100-eps)% dei casi, ti accorgi del problema un bel po' dopo che e' successo/ Il callstack e' fondamentale.