Три класса отказов Pulse
Повреждённая NDJSON-строка — ожидаемая ошибка входа: её можно отметить и продолжить по политике. Нарушение предметного правила, например отрицательная длительность события, получает отдельную причину. TypeError или исчерпание памяти указывают на дефект или аварийное состояние и не должны маскироваться как обычная строка импорта.
Эта классификация определяет повтор, продолжение и видимость. Один catch(Throwable) без решения превращает разные причины в одинаковый успех и уничтожает сигнал мониторинга.
Маршрут исключения
Error и Exception
Оба реализуют Throwable, но происхождение и возможность восстановления различаются. ValueError может возникнуть при некорректном значении встроенной функции, TypeError — при несовместимом типе, а пользовательское исключение описывает правило приложения. Иерархия catch идёт от конкретного к общему.
Не перехватывайте исключение только ради немедленного throw того же объекта и повторного лога. Один владеющий boundary добавляет correlation id и безопасный контекст; верхний процесс сообщает финальный status или exit code.
Error handler и shutdown
set_error_handler способен преобразовать выбранные PHP warning в ErrorException, но handler уважает текущий error_reporting и не получает все фатальные ситуации. register_shutdown_function может увидеть последнюю ошибку через error_get_last, однако в аварийном состоянии доступные ресурсы ограничены.
Shutdown не является транзакцией и не гарантирует доставку сложного сетевого отчёта. Его задача — минимальная запись заранее подготовленным каналом. Долговечность данных обеспечивается до опасной операции, а не финальным callback.
Что изменилось в 8.5
PHP 8.5 добавил функции чтения текущих обработчиков и backtrace для ряда фатальных ошибок. Это помогает диагностике, но не делает display_errors безопасным для посетителя. Новые возможности проверяются по migration guide и тестируются на фактической версии runtime.
Pulse сохраняет идентификатор пакета, номер строки и класс причины. Полное содержимое события в журнал не попадает: оно может содержать персональные данные или секреты.
Лаборатория
Создайте четыре сценария: повреждённый JSON, недопустимое значение, TypeError и исключение хранилища. Зафиксируйте, продолжает ли импорт работу, что видит оператор и какой код получает вызывающий процесс.
- Одна причина журналируется один раз.
- STDOUT не загрязнён stack trace.
- Пользовательский ответ не раскрывает путь файла.
Закрепите материал
Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- php.nethttps://www.php.net/manual/en/language.errors.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
- php.nethttps://www.php.net/releases/8.5/en.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .