Профессиональный подход к отлову ошибок
Одним из основных правил разработки пользовательского сервиса, например, web-приложения, является обеспечение сокрытия всякого рода ошибок в работе сайта от посторонних глаз. Нет, не для того, чтобы не позориться :) а для того, чтобы не давать пищу для размышлений всяким злоумышленникам, которые захотят сломать ваш сайт. Конечно, это лишь дополнительная мера, но очень действенная, чтобы уменьшить риски, связанные с неопытностью разработчиков и объективным наличием ошибок в программном коде.
У данного подхода есть одна неприятная особенность: пользовательский интерфейс вашего сервиса часто является единственным источником информации об ошибках, который виден тестировщикам и разработчикам. Если вы уберете все сообщения об ошибках со страниц сайта, то просто не узнаете о них.
С данной проблемой можно бороться по-разному:
- Использовать библиотеки для протоколирования поведения приложения, выводить ошибки в стандартные потоки (например, в лог ошибок apache). При этом вам придется иметь доступ к боевому серверу, постоянно анализировать логи на предмет появление ошибок, разбираться в простыне вызовов, которые привели к ошибкам и додумывать контекст работы сервиса, в котором ошибка воспроизводится.
- Отправлять почтовые уведомления по факту возникновения ошибки, анализировать их и потом вручную заносить в свой баг-трекер для анализа и исправления в очередной версии. Даже, если это происходит автоматически, то почтовый сервер здесь является явно лишним звеном, вносящим дополнительные риски потерять важную ошибку.
- Использовать выделенный сервер для хранения отчетов об ошибках, с возможностью авторизации при их просмотре. Этот подход лучше, чем просмотр логов на боевом сервере, однако требует наличия выделенного сервера и, опять же, кто-то должен переносить эти ошибки в любимый баг-трекер.
Я хочу предложить еще один способ, который устраняет недостатки всех вышеперечисленных: автоматическая регистрация ошибок в баг-трекере. Данный подход уже эффективно используется в сервисе "Облако проектов". Суть данного решения заключается в том, что вы добавляете в код своего сайта или приложения логику, которая перехватывает момент возникновения ошибки и сразу же отправляет информацию о ней в баг-трекер, который отправляет письма разработчикам, чтобы те отреагировали.
Все, что вам нужно сделать для автоматического получения сообщений об ошибках на сайте, разработанном на PHP:
- Создать проект на Облаке проектов.
- Загрузить скрипт PHPBugReporter.php, изменить параметры подключения к проекту.
- Подключить выполнение этого скрипта на всех страницах сайта путем обычного include(...)
Что важно, никаких дополнительных вызовов или изменений вашего кода не требуется. Этот скрипт умеет перехватывать как пользовательские ошибки, так и всякого рода "fatal error". Вы можете добавить дополнительную информацию о вашем приложении, контексте исполнения (например, имя текущего пользователя), чтобы проще было анализировать и воспроизводить ошибки.
В ближайших планах выложить подобные решения или расширения существующих обработчиков ошибок для известных языков и платформ (c++, c#, java).