Notre application Web utilise un ExceptionMapper
pour mapper certaines exceptions à Response
. Nous enregistrons les messages d'exception avant de lancer une nouvelle exception comme suit:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
Nous ne relançons pas la même exception , donc ma question est de savoir si cela serait considéré comme --- Log and Throw antipattern . Et donc, serait-il préférable de supprimer la journalisation dans des endroits similaires et de les déplacer vers les différentes classes ExceptionMapper
comme suit:
@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();
}
}
Votre code ne porte en fait pas un, mais trois antipatterns:
Si vous avez suivi la meilleure pratique pour:
log.error("Error occurred", e);
vous ne rencontriez alors aucun dilemme, y compris le vôtre, car la trace de pile consignée inclurait également toutes les exceptions encapsulées.