Наше веб-приложение использует ExceptionMapper
для сопоставления некоторых исключений Response
. Мы регистрируем сообщения об исключениях перед тем, как выдавать новое исключение следующим образом:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
Мы не выкидываем одно и то же исключение , поэтому мой вопрос, будет ли это рассматриваться как антипаттерн Log and Throw . И, таким образом, было бы лучше удалить записи в аналогичных местах и переместить их в несколько ExceptionMapper
классов следующим образом:
@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
Диярбакыр
источник
источник
ex.getMessage()
, это уже неправильно.Ответы:
Ваш код на самом деле содержит не один, а три антипаттерна:
Если вы следовали передовой практике, чтобы:
log.error("Error occurred", e);
тогда вы не столкнетесь ни с какими дилеммами, в том числе и с текущей, потому что вошедшая в журнал трассировка стека также будет включать все обернутые исключения.
источник