Java: Welche Informationen im Fehler-Stack-Trace möchten wir Benutzern normalerweise nicht anzeigen?

Ich bin neu in Java und ich bin nicht so vertraut mit den Formatierungsregeln, die von einem Fehler-Stack-Trace verwendet werden, wenn er ausgelöst und anschließend einem Endbenutzer meiner Webanwendung angezeigt wird.

Nach meiner Erfahrung mit Oracle-Datenbanken enthält der Fehler-Stack interne Informationen wie Schema- und Prozedurnamen sowie Zeilennummern, die ich für das Debuggen hilfreich finde, aber nicht für den Benutzer sichtbar machen möchte. Hier ist ein Beispiel:

java.sql.SQLException : ORA-20011: Error description here
ORA-07894: at "NAME_OF_SCHEMA.PROCEDURE_NAME", line 121
ORA-08932: at line 10

Die Zeichenfolge, die ich dem Benutzer anzeigen möchte, istError description here. Ich kann diese Zeichenfolge mit regulären Ausdrücken extrahieren, da ich weiß, dass (1) sich diese Zeichenfolge immer in der ersten Zeile befindet, sodass ich die erste Zeile der Fehler-Stack-Ablaufverfolgung extrahieren kann, und (2) diese Zeichenfolge immer mit beginntError und endet mit dem Zeilenende. [Hinweis für Oracle-Benutzer (ich möchte Sie nicht irreführen): Dies gilt nur, wenn RAISE_APPLICATION_ERROR mit einer Fehlerzeichenfolge verwendet wird, die mit beginntError, sonst der textError ist nicht da].

Meine Fragen an Java sind:

(1) Gibt es etwas potenziell Sensibles, das Benutzer im Fehlerstapel nicht sehen sollen? Wenn ja, was? Zum Beispiel Dateipfade, Servername / IP usw.

(2) Gibt es Formatierungsregeln für den Java-Fehler-Stack-Trace, auf die ich mich verlassen kann, um die nicht vertraulichen Informationen zu extrahieren? Oder wie sollen andere auf dieses Anliegen eingehen?

UPDATE 1:

Vielen Dank für alle bisherigen Antworten, sie waren sehr hilfreich. Während viele Leute kommentieren, um eine Funktion wie zu verwendengetUserFriendlyMessage() Ich frage mich, ob jemand diese Zuordnung erweitern könnte, um Fehler nützlichen Benutzermeldungen zuzuordnen. Das heißt, für die allgemeinen Fehler (SQL, E / A usw.), welche "zuverlässige" Kennung könnte verwendet werden, um diesen Fehlerstapel nach der Art des aufgetretenen Fehlers zu durchsuchen, und welche entsprechende Textzeichenfolge würden Sie empfehlen auf diese Fehlermeldung abbilden, um sie dem Benutzer anzuzeigen? @ Adarshrs Antwort unten ist ein guter Anfang. Zum Beispiel,

Identified Expected   If found in error stack, display this friendly msg to user
-------------------   ----------------------------------------------------------
SQLException          An error occurred accessing the database. Please contact support at [email protected].
IOException           Connection error(?). Please check your internet connection.

Angenommen, compilerbezogene Fehler müssen nicht behoben werden, sondern konzentrieren sich auf die Fehler, die Endbenutzer bei normaler Verwendung möglicherweise haben. Als Referenz finden Sie hier eine Liste der Laufzeitfehlermeldungen:http://mindprod.com/jgloss/runerrormessages.html#IOEXCEPTION

Ist es alternativ möglich, nur die ERSTE ZEILE des Stack-Trace zu verwenden, um ihn dem Benutzer anzuzeigen? Dieser Link ist eine Art von dem, worauf ich in meiner ursprünglichen Frage oben gekommen bin:

http://www3.ntu.edu.sg/home/ehchua/programming/howto/ErrorMessages.html

Zum Beispiel, wenn der BezeichnerException Wird immer verwendet, könnte man einfach den Text extrahieren, der dazwischen kommtException und das Ende der ersten Zeile. Ich weiß nicht, ob wir uns darauf verlassen könnenException immer da sein.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage