Почему современный фрамеворки отказываются от recoverable error?
Собственно вопрос в заголовке.
В нативном php вызов функции, например, trigger_error('Моя некритичная ошибка') вызовет сохранение этой информации в лог ну и обработку всякими хендлерами включая внешние типа newrelic. При этом если я руками не вызову эту функцию с E_USER_ERROR, выполнение программы продолжится дальше (опять же согласно документации php). Но если взять фрамеворк (Yii1/2, Laravel) то мы увидим, что создание ошибок вида E_USER_NOTICE/E_USER_WARNING уже вызовет завершение работы приложения. Т.е. мало того, что они выкинули как класс revoverable error, так еще и изменили поведение стандартной функции php.
Простой пример, зачем нужны recoverable error:
Есть сервис в вакууме рассылки смс к которому подключено два шлюза (основной и запасной). Ошибка подключения к основному шлюзу и отправка через запасной - это восстановимая ошибка, так как не возник отказ в обслуживании. Отказ обоих шлюзов - это уже критическая ошибка.
Так вот, в современных фрамеворках я уже не могу так просто бросить себе recoverable error и приходиться городить огород что бы просто мониторить факт отказа основного шлюза.
Вопрос один: зачем они так сделали?
Извините, немного подгорело.
Вы вопрос читали? Я не хочу ничего выводить, я хочу кинуть в лог (в сторонние системы мониторинга через стандартные средства). Я же сам этот ворнинг генерю, зачем мне его как ексеплен потом ловить, что бы потом еще раз с ним что-то сделать?
Олег Матрозов: Вы - динозавр, батюшка. В краце:
где-то далеко в просторах кода - throw *Аларм, пишите меня в лог*
где-то ближе к вам - catch(ex) -> log(ex) // ex == *Аларм, пишите меня в лог*
P.S. В вашем примере вообще нет ошибок, которые надо выкидывать, только пишем в лог если что-то не то и всё.
Ну, может я и динозавр, но многие системы внешнего мониторинга (тот же newrelic) навешиваются как стандартных hendler и это очень удобно, пока ты не встречаешься с модными фрамеворками. И не понимаю, кто решил, что trigger_error с E_USER_NOTICE теперь не по феншую, оно ведь до сих пор не deprecated в php включая 7 версию. Т.е. на лицо изменение базового функционала без видимых на то причин, только потому, что модно.