¿Cómo puedo detectar errores globalmente, registrarlos y mostrar al usuario una página de error en la aplicación J2EE?

He buscado un poco este tema en google y he visto algunas de las mejores prácticas. Pero necesito algunos consejos específicos. Estoy trabajando en una aplicación J2EE que tiene servlets / Struts2 / Call to DAO's de JSP's. Entonces, la aplicación está en mal estado. La mayoría de los datos se obtienen a través de procedimientos almacenados, a los que llama iBatis ORM / Spring. A veces, cuando se produce un error en el lado del SP, se mostrará un mensaje feo al usuario, como se muestra a continuación:

javax.servlet.ServletException: org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred in debtowed.xml.  
--- The error occurred while applying a parameter map.  
--- Check the debtowed.getFormerTenantData.  
--- Check the statement (update procedure failed).  
--- Cause: java.sql.SQLException: ORA-06550: line 1, column 11:
PLS-00905: object package.GET_FORMER_ADDRESS is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

Caused by: java.sql.SQLException: ORA-06550: line 1, column 11:
PLS-00905: object package.GET_FORMER_ADDRESS is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

En este punto, la información anterior se muestra en el navegador y se registra en server.log.
Sin embargo, quiero hacer lo siguiente:

Usuario actual con página de error personalizadaregistrar los errores en myapp.log en lugar de server.log (hacemos esto en otros lugares ya que usamos log4j)

Por favor dime ¿cuál es la mejor manera de hacer esto? ¿Debo agregar algo en web.xml? como un oyente? ¿será ese el único cambio o tendré que cambiar el código existente?

El código no realiza ninguna comprobación de errores. solo llama al SP como a continuación

getSqlMapClientTemplate().queryForList("sp.getfmrAddy", paramMap);

Respuestas a la pregunta(2)

Su respuesta a la pregunta