@ExceptionHandlerСейчас покажу простой, но часто упускаемый момент при обработке ошибок в Spring Boot.
Если у вас есть глобальный
@ExceptionHandler, убедитесь, что вы не теряете stacktrace при логировании.❌ Плохо:
@ExceptionHandler(MyException.class)
public ResponseEntity<String> handle(MyException ex) {
log.error("MyException occurred: {}", ex.getMessage()); // stacktrace теряется!
return ResponseEntity.status(500).body("Error");
}
✅ Хорошо:
@ExceptionHandler(MyException.class)
public ResponseEntity<String> handle(MyException ex) {
log.error("MyException occurred", ex); // stacktrace будет видно в логе
return ResponseEntity.status(500).body("Error");
}
📌
log.error(String, Throwable) — правильный способ логировать исключения. Это позволяет:* Сохранять stacktrace для дебага;
* Не терять вложенные причины (
getCause());* Работать с лог-агрегаторами (ELK, Grafana, etc).
💡 Если вы используете Slf4j и формат
log.error("message: {}", ex.getMessage()), вы теряете почти всю полезную информацию об ошибке.⚠️ И не забывайте: глобальные хендлеры — это хорошо, но не глушите все ошибки без разбора. Лучше создавать разные
@ExceptionHandler под каждую категорию исключений.📲 Мы в MAX
👉@BookJava


