Сведения о вопросе

Killer

04:29, 8th August, 2020

Теги

Как я могу регистрировать необнаруженные исключения в PHP?

Просмотров: 1553   Ответов: 7

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



  Сведения об ответе

DO__IT

08:27, 16th August, 2020

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

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

Цитировал функцию error_log

  1. Системный регистратор PHP, использующий системный механизм ведения журнала операционной системы или файл, в зависимости от того, на что настроена директива конфигурации error_log. Это опция по умолчанию.
  2. Отправляется email по адресу, указанному в параметре destination. Это единственный тип сообщения, в котором используется четвертый параметр, extra_headers.
  3. Добавлено к файлу назначения . Новая строка не добавляется автоматически в конец строки сообщения.

Edit: есть ли у markdown тег noparse для подчеркивания?


  Сведения об ответе

ЯЯ__4

21:06, 1st October, 2020

Мне очень нравится log4php для ведения журнала, хотя он еще не вышел из инкубатора. Я использую log4net практически во всем, и нашел этот стиль вполне естественным для меня.

Что касается системных сбоев, то вы можете регистрировать ошибку в нескольких местах назначения (например, иметь приложения с порогом CRITICAL или ERROR, которые вступают в игру только тогда, когда что-то идет не так). Я не уверен, насколько надежны существующие аппендеры-если база данных не работает, как этот аппендер выходит из строя?-- но вы вполне можете написать свой собственный аппендер, который изящно провалится, если он не сможет войти в систему.


  Сведения об ответе

SSESION

19:19, 26th August, 2020

Просто записать их в файл не будет полезно, не так ли?

Но конечно же это так - это отличная вещь, гораздо лучше, чем показывать их на экране. Вы хотите показать пользователю красивый экран, на котором написано: "Извините, мы облажались. Инженеры были уведомлены. Вернитесь и попробуйте еще раз", и абсолютно никаких технических деталей, потому что это было бы угрозой для безопасности. Вы можете отправить email в общий почтовый ящик и записать исключение в файл или DB для последующего просмотра. Это было бы лучшей практикой.


  Сведения об ответе

прога

15:24, 17th August, 2020

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

Если вы знаете, что это одноразовая ошибка, то отправка уведомления по электронной почте может быть прекрасным. Однако, с большим количеством посещений в минуту веб-сайта, никогда не email уведомление. Я видел веб-сайт, обрушившийся из-за того, что сотни писем в минуту генерируются, чтобы сказать, что система не может подключиться к базе данных. Тот факт, что он также имел LoadAvg из > 200 из-за того, что почтовый сервер запускался для каждого нового сообщения, совсем не помогал. В этом случае лучшим сценарием была, безусловно, проверка сторожевого пса на наличие файлов и подключение к внешней службе для отправки SMS (возможно, IM), или поиск внешней системой на веб - странице сообщения об ошибке (которое не обязательно должно быть видно на экране-оно может быть в комментарии HTML).


  Сведения об ответе

dump

19:06, 7th August, 2020

Вы также можете поймать и записать PHP исключений с помощью Google Forms. Здесь есть учебник, который объясняет этот процесс.


  Сведения об ответе

Chhiki

16:53, 4th August, 2020

Я думаю, что это во многом зависит от того, где произошла ваша ошибка. Если DB не работает протоколирование его в DB не является хорошей идеей ;)

Я использую функцию syslog() для регистрации ошибки, но у меня нет проблем с записью ее в файл, когда я нахожусь в системе, которая не имеет поддержки системного журнала. Вы можете легко настроить свою систему для отправки вам сообщения email или jabber, используя, например, logwatch или стандартный syslogd .


  Сведения об ответе

+-*/

23:17, 12th August, 2020

I второй log4php. Я обычно настраиваю его для отправки таких вещей, как исключения в ERROR или CRITITCAL, и записываю их в системный журнал. Оттуда вы можете отправить свой системный журнал в Zenoss, Nagios, Splunk или что-нибудь еще, с чем может разговаривать системный журнал.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться