Плагин Error Monitor & Notifier кроме логирования поддерживает следующие каналы уведомлений об ошибках:
Оповещения с подробностями о сбое избавляют от мучительного изучения логов и значительно повышают скорость исправления ошибок на WordPress-сайтах.
Разработчики устраняют сбой сразу после поступления мгновенного уведомления и экономят время на поиске ошибок в журнале. Сообщение Error Monitor & Notifier невозможно проигнорировать или не заметить, тогда как ошибки в логах часто остаются без внимания.
Состав уведомления
Сообщение об ошибке содержит:
- Тип ошибки, PHP или JavaScript
Отвечает на вопрос, в какой части сайта — на фронтэнде или на сервере — возникла ошибка или предупреждение
- Уровень PHP-ошибки
Указывает, насколько серьезная ошибка возникла
- Текст сообщения об ошибке
- Путь к файлу, в котором возникла ошибка, и номер строки
- Обратную трассировку стека вызовов, в котором последний вызов функции или метода идет первым
Сообщает последовательность вызовов, которые привели к сбою
- Адрес запроса на основе элемента
REQUEST_URIсуперглобального массива$_REQUESTПомогает понять, на какой странице или при обращении к какому URL-адресу возникла ошибка
- Заголовок
User-AgentЗаголовок помогает определить устройство пользователя или понять, что сайт посетил поисковый бот
- IP-адрес запроса
Заблокируйте злоумышленника в CloudFlare, iptables или через другой инструмент, если по характеру оповещения видно, что выполняются атаки или попытки сломать сайт
- Идентификатор WordPress-пользователя и ссылку на профиль пользователя, или указание, что сайт посетил Гость
Информация о пользователе помогает сразу связаться с клиентом, когда он столкнулся с ошибкой при оформлении заказа или на другом этапе взаимодействия с сайтом
Игнорирование ошибок
В плагине Error Monitor & Notifier версии 1.1.5 появился хук-фильтр enot_ignore_error, который разрешает игнорировать отдельные типы ошибок на основе информации, которая доступна через стандартные методы объекта ErrorException. Плагин не станет записывать ошибку в лог или отправлять уведомление по условию, например:
// Игнорировать ошибки уровня E_WARNING, которые генерирует плагин WooCommerce
add_filter('enot_ignore_error', static function (bool $ignore, \ErrorException $e): bool {
if (
$e->getSeverity() === E_WARNING
&& strpos($e->getFile(), '/plugins/woocommerce/') !== false
) {
return true;
}
return $ignore;
}, 10, 2);
Хуки часто добавляют в файл функций текущей темы. Но отдельные ошибки возникают до загрузки файла
functions.php, а в других случаях наподобие срабатывания задания cron файл функций не загружается. Поэтому фильтры игнорирования ошибок лучше добавить в отдельный файл наподобиеmu-plugins/enot-ignore-error.php, чтобы прикрепиться к хуку фильтрации на раннем этапе.
Сокрытие чувствительных аргументов в URL-адресах
С плагином Error Monitor & Notifier версии 1.1.6 доступна маскировка чувствительных аргументов в URL-адресах, которые встречаются в оповещениях об ошибках. Плагин заменяет в адресе значения атрибутов с названиями наподобие api_key или oauth_token символами x.
Разработчикам доступны 3 новых хука — фильтры enot_ignore_url_replace_sensitive_args, enot_url_replace_sensitive_args и enot_url_after_sensitive_replacement для управления поведением маскирования чувствительных значений в адресах:
// Сохранять исходные URL-адреса и не маскировать чувствительные аргументы
add_filter('enot_ignore_url_replace_sensitive_args', '__return_true');
// Дополнить или заменить стандартный массив с названиями чувствительных аргументов
// в URL-адресах
add_filter('enot_url_replace_sensitive_args', static function (array $sensitivities): array {
return ['token', 'api_key', 'oauth_token',];
});
// Изменить выходной URL-адрес наподобие https://example.com/?token=xxxxxxx,
// в котором плагин замаскировал чувствительные аргументы
add_filter('enot_url_after_sensitive_replacement', static function (string $url): string {
// Обработать адрес, если потребуется скрыть дополнительные части URL
return $url;
});
Пользовательская логика перед завершением работы скрипта
С версии 1.1.10 разработчикам доступен хук фильтрации enot_exception_handler_should_exit.
Плагин оборачивает уведомления, предупреждения, PHP-ошибки, ошибки в JavaScript-коде и ошибки при запросах к базе данных в исключение ErrorException, при этом для встроенных и пользовательских исключений тип сохраняется. Такой подход помогает управлять ошибками централизованно, в одном месте. Аналогично стандартному поведению PHP после обработки пользовательских ошибок, плагин не прерывает работу скрипта, а при критических ошибках вызывает функцию exit;.
С новой версии плагин предоставляет программистам фильтр, который разрешает добавлять пользовательскую логику логирования, отправки метрик или отладки перед завершением работы скрипта и даже возвращать false, чтобы сайт не прервал работу при исключениях, которые не отловили вручную в блоке try-catch.
// Не прерывать работу скрипта, если возникло неотловленное исключение
\add_filter('enot_exception_handler_should_exit', static function (bool $should_exit, \Throwable $e): bool {
// Кастомная обработка исключения
if ($e instanceof \CustomException) {
logger()->log("Caught exception: " . $e->getMessage());
return false; // Не прерывать работу скрипта
}
return $should_exit;
}, 10, 2);