Как создать автоматическую систему отслеживания ошибок в WordPress

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

Зачем нужна система отслеживания ошибок в WordPress

Ошибки PHP, сбои в работе плагинов, проблемы с базой данных, ошибки JavaScript — все это может негативно влиять на производительность сайта, опыт пользователей и SEO. Автоматическая система отслеживания ошибок позволит:

  • Собирать подробные логи с описанием ошибок, включая стек вызовов;
  • Получать уведомления на email или в мессенджеры при возникновении критических ошибок;
  • Анализировать частоту и типы ошибок для планирования исправлений;
  • Уменьшить время простоя сайта за счет быстрого реагирования на проблемы.

Использование встроенных возможностей WordPress для логирования ошибок

WordPress по умолчанию поддерживает ведение логов ошибок через файл debug.log. Для активации этой функции в wp-config.php нужно добавить или изменить следующие строки:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Это позволит записывать все ошибки, предупреждения и уведомления PHP в файл wp-content/debug.log, не показывая их на экране посетителям.

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

Создание кастомной системы логирования ошибок с уведомлениями (пример кода)

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

1. Регистрация обработчика ошибок

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

function wpkit_error_logger_handle_php_error($errno, $errstr, $errfile, $errline) {
    $log_file = WP_CONTENT_DIR . '/wpkit-error-log.log';
    $error_types = [
        E_ERROR => 'ERROR',
        E_WARNING => 'WARNING',
        E_PARSE => 'PARSE ERROR',
        E_NOTICE => 'NOTICE',
        E_CORE_ERROR => 'CORE ERROR',
        E_CORE_WARNING => 'CORE WARNING',
        E_COMPILE_ERROR => 'COMPILE ERROR',
        E_COMPILE_WARNING => 'COMPILE WARNING',
        E_USER_ERROR => 'USER ERROR',
        E_USER_WARNING => 'USER WARNING',
        E_USER_NOTICE => 'USER NOTICE',
        E_STRICT => 'STRICT',
        E_RECOVERABLE_ERROR => 'RECOVERABLE ERROR',
        E_DEPRECATED => 'DEPRECATED',
        E_USER_DEPRECATED => 'USER DEPRECATED'
    ];

    $type = isset($error_types[$errno]) ? $error_types[$errno] : 'UNKNOWN';
    $date = date('Y-m-d H:i:s');
    $message = "[$date] $type: $errstr in $errfile on line $errline\n";

    error_log($message, 3, $log_file);

    // Отправка email при критических ошибках
    if (in_array($errno, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR])) {
        wpkit_error_logger_send_email($message);
    }

    return false; // Передаем обработку PHP дальше
}

function wpkit_error_logger_send_email($message) {
    $to = get_option('admin_email');
    $subject = 'Сайт WordPress: критическая ошибка';
    $headers = ['Content-Type: text/plain; charset=UTF-8'];
    wp_mail($to, $subject, $message, $headers);
}

set_error_handler('wpkit_error_logger_handle_php_error');

2. Логирование ошибок WordPress через хуки

Мы можем также ловить ошибки через хук wp_die_handler для перехвата фатальных ошибок WordPress и логировать их:

function wpkit_error_logger_wp_die_handler($message, $title = '', $args = []) {
    $log_file = WP_CONTENT_DIR . '/wpkit-error-log.log';
    $date = date('Y-m-d H:i:s');
    $log_message = "[$date] WP Die: $message\n";
    error_log($log_message, 3, $log_file);

    // Можно отправить email, если нужно
    wpkit_error_logger_send_email($log_message);

    // Выводим стандартное сообщение
    wp_die($message, $title, $args);
}

add_filter('wp_die_handler', function() {
    return 'wpkit_error_logger_wp_die_handler';
});

Использование готовых плагинов для расширенного логирования и мониторинга

Если вы не хотите писать код, можно использовать готовые решения. Вот несколько полезных плагинов:

  • Query Monitor — мощный инструмент для отладки, который показывает PHP ошибки, запросы к базе, хуки, REST API вызовы. Бесплатен и удобен для разработчиков.
  • WP Log Viewer — плагин для удобного просмотра логов прямо в админке, позволяет фильтровать и сортировать события.
  • Error Log Monitor — следит за логами ошибок и отправляет уведомления на email.
  • Clearfy Pro — многофункциональный плагин для оптимизации и безопасности, включает инструменты для контроля ошибок и производительности.

Практические советы по работе с логами и ошибками в WordPress

Организация логов и автоматическая ротация

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

Разграничение уровней логирования

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

Безопасность логов

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

Заключение

Создание собственной системы отслеживания ошибок в WordPress — полезная практика, которая поможет быстро выявлять проблемы и поддерживать сайт в отличном состоянии. Используйте приведенный пример кода как стартовую точку и адаптируйте под свои задачи. Для расширенных возможностей рассмотрите готовые плагины, например, Clearfy Pro.

Как настроить автоматическое удаление неактивных пользователей в WordPress
28.03.2026
Как создать автоматическую оптимизацию базы данных WordPress с помощью PHP
19.02.2026
Как отключить авторотацию изображений в WordPress
17.04.2026
Как создать интерактивные формы в WordPress без плагинов
01.12.2025
Как отключить XML-RPC в WordPress для повышения безопасности
25.03.2026