Nuestra aplicación web está utilizando un ExceptionMapperpara asignar algunas excepciones Response. Registramos los mensajes de excepción antes de lanzar una nueva excepción de la siguiente manera:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
No estamos volviendo a lanzar la misma excepción , por lo que mi pregunta es si esto se consideraría un antipatrón Log and Throw . Y por lo tanto, sería mejor eliminar el registro en lugares similares y moverlos a varias ExceptionMapperclases de la siguiente manera:
@Provider
public class MyExceptionMapper implements ExceptionMapper<MyException> {
// bla bla
@Override
public Response toResponse(final MyException ex) {
LOG.error(ex.getMessage());
return Response.status(400).entity("something").build();
}
}
posible duplicado de ¿Debería informar el mensaje de texto de excepciones?
En mi opinión, no es justo no mencionar en absoluto que se trata de un servicio web. Eso realmente cambia las reglas del juego, porque, por ejemplo, solo usar mecanismos de manejo de excepciones regulares puede ser un riesgo de seguridad; no desea que se envíen todas y cada una de las excepciones en una respuesta de error 500, que debe verificarse y filtrarse. El registro agresivo sobre el terreno también es mucho más común cuando se trata de sistemas que tienen clientes externos que lo invocan directamente. El registro de los seguimientos de pila en las llamadas de servicio que se invocan repetidamente puede ocasionar problemas de rendimiento y tamaños de archivos de registro inmanejables.
@Gimby En este caso, OP no envía ningún detalle de error en la respuesta (probablemente un contenido repetitivo de "error ocurrido"). Además, ¿cómo diagnostica un problema sin un stacktrace? Los registradores rodantes se ocupan habitualmente del tamaño de almacenamiento y los datos de registro son vergonzosamente comprimibles.
—
Marko Topolnik
ex.getMessage(), eso ya está mal.