Ребята, сейчас еще накину говна на вентилятор. Вот если эксепшны правильно юзать: для каждой ошибки свой класс, на каждом уровне прикреплять описание и стектрейс и перепаковывать ошибки нижнего уровня в контейнер верхнего, то у тебя ошибка как пузырек высплывает с самого дна обогащаясь состоянием программы, которое привело к ошибке.
Ты потом в системе сбора и фильтрации логов можешь понять состояние программы, которое привело к ошибке. Если не использовать эксепшны, то как достичь такого понимания внешних факторов, которые привели к ошибке?