Как создать автоматический лог по ошибкам в WordPress с применением кода

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

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

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

Создание собственного логирования позволит:

  • Фильтровать и группировать ошибки по типам или важности.
  • Автоматически отправлять уведомления администратору.
  • Хранить логи в базе данных или файлах с удобным доступом.
  • Интегрироваться с кастомными хуками и плагинами.

Мы рассмотрим пример, как реализовать такой функционал с помощью простого плагина или сниппета.

Включение базового логирования в WordPress

Для начала убедимся, что в WordPress включён режим отладки и логирования ошибок. В файле wp-config.php должны быть прописаны следующие константы:

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

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

Но как собрать эти ошибки и обрабатывать их автоматически? Для этого можно воспользоваться хуком error_log или встроенными механизмами PHP, например, установкой пользовательского обработчика ошибок.

Создание пользовательского обработчика ошибок с логированием

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

function wptool_custom_error_handler($errno, $errstr, $errfile, $errline) {
    $log_file = WP_CONTENT_DIR . '/wptool-error.log';
    $date = date('Y-m-d H:i:s');
    $error_types = [
        E_ERROR => 'Error',
        E_WARNING => 'Warning',
        E_PARSE => 'Parsing 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 => 'Runtime Notice',
        E_RECOVERABLE_ERROR => 'Recoverable Error',
        E_DEPRECATED => 'Deprecated',
        E_USER_DEPRECATED => 'User Deprecated',
    ];
    $type = isset($error_types[$errno]) ? $error_types[$errno] : 'Unknown Error';
    $message = "[$date] $type: $errstr in $errfile on line $errline\n";
    error_log($message, 3, $log_file);
    // Можно добавить отправку почты или другие действия
    return false; // Передать обработку стандартному обработчику
}

set_error_handler('wptool_custom_error_handler');

Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. Он создаст файл wp-content/wptool-error.log и будет записывать туда подробные ошибки.

Что делает код?

Функция получает параметры ошибки, определяет её тип, формирует строку с датой и всеми деталями, а затем пишет в файл. Возвращая false, мы даём системе возможность также обрабатывать ошибку стандартным образом.

Автоматизация уведомлений об ошибках по email

Иногда важно мгновенно узнавать о критических ошибках. Для этого расширим обработчик и добавим отправку почты при возникновении ошибок определённого уровня.

function wptool_custom_error_handler($errno, $errstr, $errfile, $errline) {
    $log_file = WP_CONTENT_DIR . '/wptool-error.log';
    $date = date('Y-m-d H:i:s');
    $error_types = [
        E_ERROR => 'Error',
        E_WARNING => 'Warning',
        E_PARSE => 'Parsing 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 => 'Runtime Notice',
        E_RECOVERABLE_ERROR => 'Recoverable Error',
        E_DEPRECATED => 'Deprecated',
        E_USER_DEPRECATED => 'User Deprecated',
    ];
    $type = isset($error_types[$errno]) ? $error_types[$errno] : 'Unknown Error';
    $message = "[$date] $type: $errstr in $errfile on line $errline\n";
    error_log($message, 3, $log_file);
    
    // Отправка почты только для ошибок серьезного уровня
    if (in_array($errno, [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR])) {
        $admin_email = get_option('admin_email');
        $subject = "[WPTool] Критическая ошибка на сайте";
        wp_mail($admin_email, $subject, $message);
    }
    return false;
}
set_error_handler('wptool_custom_error_handler');

Теперь при серьёзных ошибках администратор будет получать уведомления. Это помогает быстро реагировать на проблемы.

Использование плагинов для расширенного логирования ошибок в WordPress

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

  • Error Log Monitor — простой мониторинг и просмотр логов прямо в админке.
  • WP Debugging — помогает управлять режимом отладки и логами.
  • Clearfy Pro — комплексный набор инструментов оптимизации, включая расширенное логирование и очистку ошибок.

Однако собственное решение даёт полную свободу и позволяет интегрировать логи с вашими процессами.

Хранение логов ошибок в базе данных WordPress

Иногда удобнее хранить логи в базе данных для удобного поиска и фильтрации. Пример создания таблицы и записи ошибок:

function wptool_create_error_log_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wptool_error_log';
    $charset_collate = $wpdb->get_charset_collate();
    
    $sql = "CREATE TABLE $table_name (
        id BIGINT(20) NOT NULL AUTO_INCREMENT,
        error_type VARCHAR(100) NOT NULL,
        error_message TEXT NOT NULL,
        error_file VARCHAR(255) NOT NULL,
        error_line INT NOT NULL,
        error_date DATETIME NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wptool_create_error_log_table');

function wptool_custom_error_handler_db($errno, $errstr, $errfile, $errline) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wptool_error_log';
    $error_types = [
        E_ERROR => 'Error',
        E_WARNING => 'Warning',
        E_PARSE => 'Parsing Error',
        E_NOTICE => 'Notice',
        // остальные типы...
    ];
    $type = isset($error_types[$errno]) ? $error_types[$errno] : 'Unknown Error';
    $wpdb->insert($table_name, [
        'error_type' => $type,
        'error_message' => $errstr,
        'error_file' => $errfile,
        'error_line' => $errline,
        'error_date' => current_time('mysql')
    ]);
    return false;
}
set_error_handler('wptool_custom_error_handler_db');

Так вы сможете создавать запросы к таблице для анализа и создавать админ-панель с фильтрами.

Панель управления логами в админке WordPress

Для удобства можно добавить меню в админке и выводить логи с пагинацией и фильтрами. Пример простого добавления меню:

function wptool_error_log_menu() {
    add_menu_page(
        'Логи ошибок WPTool',
        'Логи ошибок',
        'manage_options',
        'wptool-error-log',
        'wptool_error_log_page',
        'dashicons-warning'
    );
}
add_action('admin_menu', 'wptool_error_log_menu');

function wptool_error_log_page() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wptool_error_log';
    $logs = $wpdb->get_results("SELECT * FROM $table_name ORDER BY error_date DESC LIMIT 50");
    echo '<div class="wrap"><h1>Логи ошибок WPTool</h1><table class="widefat"><thead><tr><th>ID</th><th>Тип</th><th>Сообщение</th><th>Файл</th><th>Строка</th><th>Дата</th></tr></thead><tbody>';
    foreach ($logs as $log) {
        echo '<tr>';
        echo '<td>' . esc_html($log->id) . '</td>';
        echo '<td>' . esc_html($log->error_type) . '</td>';
        echo '<td>' . esc_html($log->error_message) . '</td>';
        echo '<td>' . esc_html($log->error_file) . '</td>';
        echo '<td>' . esc_html($log->error_line) . '</td>';
        echo '<td>' . esc_html($log->error_date) . '</td>';
        echo '</tr>';
    }
    echo '</tbody></table></div>';
}

Это базовый пример, который можно расширять фильтрами, поиском и пагинацией.

Итоговые рекомендации по организации логирования

Для эффективного логирования ошибок на WordPress рекомендуем:

  • Включать WP_DEBUG и WP_DEBUG_LOG в режиме разработки.
  • Использовать собственный обработчик ошибок для расширенной записи.
  • Добавить уведомления по email для критических ошибок.
  • Рассмотреть хранение логов в базе для удобства анализа.
  • Создавать админ-панель для просмотра и управления логами.
  • Использовать проверенные плагины, если хотите быстрое решение без кода.

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

Как автоматизировать управление ролями пользователей в WordPress с помощью кода
01.02.2026
Как создать собственный shortcode в WordPress с примером кода
10.11.2025
Как создать динамическую страницу в WordPress с помощью shortcode
19.12.2025
Оптимизация производительности WordPress без плагинов: практические советы и примеры кода
03.12.2025
Как установить ограничение на число сообщений в комментариях WordPress
17.03.2026