Стоит ли печатать трассировку стека, если вы обнаружите известную ошибку (исключение)? - PullRequest
0 голосов
/ 26 июня 2018

Если я использую JpaRepository в качестве примера здесь, в приложении с весенней загрузкой.У меня обычный Контроллер -> Сервис -> Хранилище слоев.Допустим, я хочу сохранить что-то в базе данных, и этот элемент уже существует (например, исключение DataIntegrityViolationException, потому что я создал уникальное ограничение между несколькими столбцами).

Итак, допустим, это выброшено.Это ожидаемое поведение, если пользователь пытается сохранить объект, который уже имеет точные данные и уже хранится в базе данных.

Мой вопрос здесь такой: должен ли я распечатать трассировку стека или просто выполнить базовый регистратор.ошибка («Элемент уже существует с теми же значениями, которые вы пытаетесь сохранить»).

Я не могу найти рекомендации по этому вопросу.Я думаю, что это известная ошибка, и я знаю, что пошло не так, поэтому мне не нужна трассировка стека.Это просто спам в журнале с дополнительными строками кода.

Есть ли хорошие указатели?

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Если это ожидаемое поведение, перехватите исключение, сделайте что-нибудь разумное и не регистрируйте ошибку.Если вы решили, что хотите записать ошибку, включите трассировку стека.Это огорчает поиск в журналах ошибок, которые вы не можете исправить (а это кажется одним из них?), И раздражает также поиск ошибок в журналах без достаточного количества деталей.

Конечно, если выповторно выбросить исключение, не забудьте включить оригинал (передать его конструктору).

0 голосов
/ 26 июня 2018

Я бы сделал оба logger.error («Элемент уже существует с теми же значениями, которые вы пытаетесь сохранить», e).Таким образом, вы знаете, что это известное исключение, и у вас также будет трассировка стека, поэтому вам не нужно искать класс и метод, который вызывает исключение.

OP:@NullPointer Имя класса уже есть в журнале.Я знаю, где это не так, я знаю, почему JpaRepository выдал эту ошибку, мне не нужно следовать трассировке стека.Вопрос был больше, это должно быть зарегистрировано как информация или как ошибка?Но SonarQube хочет получить трассировку стека с ошибкой.

Определенно не как информация, поскольку ваша операция фиксации (сохранения записи в БД) не удалась.Если вы не хотите регистрировать это как ошибку, добавьте ее как предупреждение (logger.warn), чтобы, просматривая журналы, вы знаете, что определенная запись не была вставлена.

0 голосов
/ 26 июня 2018

Вы должны установить обработчик исключений для всего вашего приложения, который должен перехватывать исключения, регистрировать их и возвращать ответ API со статусом и сообщением.Вы должны проверить org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler класс, предоставляемый весенней загрузкой для этой же цели.Это официальный документ по этому классу

Удобный базовый класс для классов {@link ControllerAdvice @ControllerAdvice}, которые хотят обеспечить централизованную обработку исключений во всех методах {@code @RequestMapping} через {@code@ExceptionHandler} методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...