Наше веб-приложение использует 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();
}
}
Возможный дубликат Если вы сообщаете текст сообщения об исключениях?
Спорная, отчетность текста сообщения исключений является всегда плохой идеей .
ИМО не совсем справедливо вообще не упоминать, что это веб-сервис. Это действительно меняет правила игры, потому что, например, обычное использование исключений может быть угрозой безопасности; Вы не хотите, чтобы все и все исключения отправлялись обратно в ответе об ошибке 500, который необходимо проверить и отфильтровать. Агрессивная регистрация на месте также гораздо чаще встречается при работе с системами, у которых внешние клиенты напрямую ее вызывают. Ведение журналов стековых трасс в сервисных вызовах, которые вызываются неоднократно, может привести к неуправляемым размерам файлов журнала и проблемам с производительностью.
@ Gimby В этом случае OP не отправляет подробности об ошибке в ответе (возможно, содержание "ошибка произошла"). Кроме того, как вы диагностируете проблему без трассировки стека? Вращающиеся регистраторы обычно заботятся о размере хранилища, а данные журнала смущающе сжимаются.
—
Марко Топольник
ex.getMessage()
, это уже неправильно.