Каков наилучший способ получить ошибки с рабочего сайта на PHP? - PullRequest
1 голос
/ 26 ноября 2008

Для большинства производственных сайтов вы хотите знать, когда произошла ошибка, как можно скорее. Мой вопрос, как лучше всего получить эту информацию.

Как правило, лучше всего получать сообщения об ошибках по электронной почте, поскольку я не собираюсь сидеть каждый день и просматривать журналы ошибок до тех пор, пока не возникнет ошибка - это было бы невозможно, поскольку у меня 20 или более рабочих сайтов на разных сервера. Эти ошибки могут быть любыми, включая неустановленные переменные, полученные неверные данные или ошибки запроса.

На данный момент я следовал примеру на веб-сайтах PHPs, найденных здесь . В результате он создает текстовую строку вместе с файлом XML, который затем отправляется по электронной почте. Я немного изменил это, чтобы сохранить все ошибки, пока сценарий не закончится, а затем отправить электронное письмо с прикрепленными файлами XML. (Я разбил пару почтовых серверов, отправляющих более 500 000 писем из-за ошибки в цикле.) В большинстве случаев это работает идеально. (Я также создал объект для выполнения всей обработки ошибок.)

Проблема возникает, когда для обработки wddx_serialize_value() имеется большой объем данных. И затем, если есть несколько ошибок, это действительно приводит к использованию большого количества памяти, в большинстве случаев больше, чем разрешено использовать сценарию.

Из-за этого я добавил gzcompress() в файл XML перед сохранением его в переменной. Это помогает, но если объем данных очень велик, ему все равно не хватает памяти. (В недавнем случае он хотел использовать около 2 ГБ.)

Мне интересно, какие еще существуют решения для этого или как вы изменили это, чтобы оно заработало?

Итак, несколько требований:

  • он должен иметь возможность отправлять мне больше, чем просто сообщение об ошибке, и не должен заставлять меня входить в систему на сервере, чтобы выяснить, что произошло (поэтому я могу проверить мобильность и определить, срочно ли это)
  • должно быть ограничение на количество отправленных писем. Лучше всего 1.
  • необходимо войти в файл, как обычно

Редактировать: Мне нужна другая информация, связанная с ошибкой, а не только строка ошибки. Часто я нахожу, что почти невозможно воспроизвести ошибку, потому что она вызвана пользовательским вводом, который я не знаю, пока не получу больше информации. Я старался изо всех сил вводить информативные ошибки, но вы никогда не знаете, как пользователь будет использовать систему или какие дерьмовые данные они будут вводить. Поэтому мне нужно больше, чем просто текст ошибки / строка.

Редактировать 2: Невозможно зарегистрировать ошибки в базе данных, поскольку, насколько я знаю, базы данных там может не быть. Нужно что-то, что в значительной степени гарантировано для запуска. Кроме того, сайты не все на 1 сервере, и у меня часто нет доступа к cron на сервере (глупые хостинговые компании).

Ответы [ 4 ]

1 голос
/ 26 ноября 2008

Одним из подходов может быть правильное управление исключениями в вашем приложении, то есть контроль над тем, какие ошибки регистрируются.

Каждое возбужденное исключение регистрирует подробности ошибки в базе данных.

Затем вы можете написать небольшое приложение для поиска в базе данных ошибок, возможно, по одному для всех ваших сайтов.

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

1 голос
/ 26 ноября 2008

Вместо того, чтобы устанавливать собственный обработчик ошибок, я позволяю ошибкам идти в журнал ошибок как обычно. Я установил cron, который периодически запускается и отслеживает изменения в журнале ошибок - если он изменился, он отправляет мне электронное письмо только с изменениями. Вы можете улучшить этот процесс и проанализировать изменения, чтобы лучше соответствовать вашим потребностям - например, отправлять вам только ошибки выше определенного уровня (например, E_WARNING и выше).

0 голосов
/ 27 ноября 2008

Одна вещь, которую я использовал в прошлом, это epylog , это очень гибкое приложение для мониторинга журналов, написанное на python. Вы можете настроить его для отслеживания журналов ошибок и включения ошибок (или их частей) в сводку журналов, отправленную вам по электронной почте.

Я бы предпочел сохранить более подробные данные об ошибках в плоском файле на сервере и отправить вам электронное письмо с просьбой проверить журнал. Задание cron, которое просматривает каталог ошибок или файлы на предмет изменений и имеет установленный предел скорости, было бы хорошим способом минимизировать влияние на работающее приложение.

0 голосов
/ 27 ноября 2008

Anacron, задание cron, которое отправляет по электронной почте изменения в журнал ошибок * и файл журнала ошибок должен быть достаточным. Задание cron может выполнить всю необходимую обработку перед отправкой электронного письма.

...