Nosso aplicativo da web está usando um ExceptionMapper
para mapear algumas exceções Response
. Registramos as mensagens de exceção antes de lançar uma nova exceção da seguinte maneira:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
Não estamos lançando novamente a mesma exceção , então minha pergunta é se isso seria considerado um antipadrão de Log and Throw . E, portanto, seria melhor remover o log em locais semelhantes e movê-los para as várias ExceptionMapper
classes da seguinte maneira:
@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();
}
}
java
anti-patterns
Diyarbakir
fonte
fonte
ex.getMessage()
, isso já está errado.Respostas:
Seu código, na verdade, ostenta não um, mas três antipadrões:
Se você seguiu a melhor prática para:
log.error("Error occurred", e);
você não enfrentaria nenhum dilema, incluindo o atual, porque o stacktrace registrado também incluiria todas as exceções agrupadas.
fonte