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.