Soy nuevo en Java y no estoy familiarizado con las reglas de formato utilizadas por un seguimiento de la pila de errores cuando se lanza y posteriormente se muestra a un usuario final de mi aplicación web.Java: ¿qué información en el seguimiento de la pila de error normalmente no deseamos mostrar a los usuarios?
Mi experiencia con la base de datos Oracle es que la pila de errores contiene información interna, como nombres de esquema y procedimiento y número (s) de línea que, aunque son útiles para la depuración, me gustaría evitar que el usuario vea. He aquí un ejemplo:
java.sql.SQLException : ORA-20011: Error description here
ORA-07894: at "NAME_OF_SCHEMA.PROCEDURE_NAME", line 121
ORA-08932: at line 10
La cadena Quiero mostrar al usuario es Error description here
. Puedo extraer esta cadena utilizando expresiones regex porque sé que (1) esta cadena está siempre en la primera línea, así que puedo extraer la primera línea del seguimiento de la pila de errores, y (2) esta cadena siempre comienza con Error
y termina con el final de la línea. [Nota para los usuarios de Oracle (no quiero engañarlo): lo anterior solo se aplica cuando se utiliza RAISE_APPLICATION_ERROR con una cadena de error que comienza con Error
, de lo contrario, el texto Error
no está allí].
Mis preguntas para Java son:
(1) ¿Hay algo potencialmente sensible que no quiera que los usuarios ven en la pila de errores? ¿Entonces qué? Por ejemplo, rutas de archivos, nombre de servidor/IP, etc.
(2) ¿Existen reglas de formato para el seguimiento de la pila de errores de Java en las que pueda confiar para extraer la información no confidencial? O, ¿cómo otros abordan esta preocupación?
ACTUALIZACIÓN 1:
Gracias por todas las respuestas hasta el momento, han sido muy útiles. Si bien muchas personas comentan el uso de una función como getUserFriendlyMessage()
para asignar errores a mensajes de usuario útiles, me pregunto si alguien podría ampliar esta asignación. Es decir, para los errores comunes (SQL, E/S, etc.), qué identificador "confiable" podría usarse para buscar en esta pila de errores para identificar el tipo de error que ocurrió, y luego qué cadena de texto correspondiente recomendaría para mapear a este mensaje de error para mostrar al usuario? La respuesta de @ Adarshr a continuación es un buen comienzo. Por ejemplo,
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.
Supongamos errores de compilación relacionados no tienen que abordarse, sino que más bien se centran aquellos errores que los usuarios finales pueden experimentar durante el uso normal. Como referencia, aquí hay una lista de mensajes de error en tiempo de ejecución: http://mindprod.com/jgloss/runerrormessages.html#IOEXCEPTION
Como alternativa, ¿es posible usar simplemente la PRIMERA LÍNEA del trazado de la pila para mostrar al usuario? Este enlace es una especie de lo que estaba haciendo en mi pregunta original anterior:
http://www3.ntu.edu.sg/home/ehchua/programming/howto/ErrorMessages.html
Por ejemplo, si el identificador Exception
se utiliza siempre, uno podría simplemente extraer el texto que se interponga entre Exception
y el fin de la primera linea No sé si podemos confiar en que Exception
siempre estará ahí.
He actualizado mi respuesta en función de su actualización. –
Consulte esta pregunta relacionada: http://stackoverflow.com/q/7361201/545127 – Raedwald