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

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

Почему важен кастомный плагин для логирования ошибок в WordPress

Встроенное логирование WordPress через WP_DEBUG_LOG сохраняет ошибки в файл wp-content/debug.log, однако этот способ имеет ряд ограничений:

  • Отсутствует фильтрация и категоризация ошибок.
  • Файл может быстро разрастаться и становиться неудобным для анализа.
  • Нет удобного интерфейса для просмотра и управления логами.
  • Невозможно интегрировать дополнительные действия, например, уведомления.

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

Основные задачи плагина логирования ошибок

Перед началом разработки определим, что должен уметь наш плагин:

  • Перехватывать PHP-ошибки, предупреждения и сообщения.
  • Сохранять логи в отдельный файл с ротацией по размеру или дате.
  • Форматировать записи для удобства чтения (дата, уровень, сообщение, файл, строка).
  • Обеспечивать возможность фильтрации по уровням ошибок.
  • Предоставлять простой интерфейс в админке для просмотра логов.
  • Добавлять возможность отправки уведомлений при критических ошибках.

Структура плагина и базовый код

Создадим папку wpunit-error-logger в директории wp-content/plugins/ и файл wpunit-error-logger.php с заголовком плагина:

<?php
/*
Plugin Name: WPUnit Error Logger
Description: Автономный плагин для логирования ошибок PHP в WordPress
Version: 1.0
Author: WPUnit
*/

if (!defined('ABSPATH')) exit; // Защита от прямого запуска

Далее определим основные константы и настройки:

define('WPUNIT_LOG_FILE', WP_CONTENT_DIR . '/wpunit-error.log');
// Максимальный размер файла лога в байтах (5 Мб)
define('WPUNIT_MAX_LOG_SIZE', 5 * 1024 * 1024);

Функция логирования ошибок

Создадим функцию, которая будет записывать сообщения в лог с форматированием и ротацией:

function wpunit_log_error($level, $message, $file = '', $line = '') {
    if (file_exists(WPUNIT_LOG_FILE) && filesize(WPUNIT_LOG_FILE) > WPUNIT_MAX_LOG_SIZE) {
        rename(WPUNIT_LOG_FILE, WPUNIT_LOG_FILE . '.' . time());
    }
    $time = date('Y-m-d H:i:s');
    $log_message = "[{$time}] [{$level}] {$message}";
    if ($file) {
        $log_message .= " in {$file}";
    }
    if ($line) {
        $log_message .= ":{$line}";
    }
    $log_message .= "\n";
    error_log($log_message, 3, WPUNIT_LOG_FILE);
}

Перехват ошибок PHP

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

function wpunit_error_handler($errno, $errstr, $errfile, $errline) {
    $levels = [
        E_ERROR => 'ERROR',
        E_WARNING => 'WARNING',
        E_PARSE => 'PARSE',
        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_DEPRECATED => 'DEPRECATED',
        E_USER_DEPRECATED => 'USER_DEPRECATED',
    ];

    $level = isset($levels[$errno]) ? $levels[$errno] : 'UNKNOWN';
    wpunit_log_error($level, $errstr, $errfile, $errline);

    /* Позволяем стандартному обработчику работать с фатальными ошибками */
    return false;
}
set_error_handler('wpunit_error_handler');

Перехват исключений

Для полноты логирования обрабатываем непойманные исключения:

function wpunit_exception_handler($exception) {
    wpunit_log_error('EXCEPTION', $exception->getMessage(), $exception->getFile(), $exception->getLine());
    // Можно добавить дополнительную логику, например, уведомления
}
set_exception_handler('wpunit_exception_handler');

Создание интерфейса просмотра логов в админке WordPress

Чтобы удобно просматривать логи, добавим страницу в меню админки.

add_action('admin_menu', function() {
    add_menu_page(
        'Логи ошибок WPUnit',
        'WPUnit Лог ошибок',
        'manage_options',
        'wpunit-error-logger',
        'wpunit_render_log_page',
        'dashicons-list-view',
        80
    );
});

function wpunit_render_log_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Доступ запрещён');
    }

    echo '<h1>Логи ошибок WPUnit</h1>';

    if (!file_exists(WPUNIT_LOG_FILE)) {
        echo '<p>Файл лога не найден.</p>';
        return;
    }

    $log_content = file_get_contents(WPUNIT_LOG_FILE);
    $log_lines = explode("\n", $log_content);

    echo '<div style="max-height:600px; overflow:auto; background:#fff; border:1px solid #ccc; padding:10px; font-family: monospace; white-space: pre-wrap;">';
    foreach ($log_lines as $line) {
        if (trim($line) === '') continue;
        echo esc_html($line) . "\n";
    }
    echo '</div>';

    echo '<form method="post" style="margin-top:15px;">';
    echo '<input type="submit" name="wpunit_clear_log" class="button button-secondary" value="Очистить лог">';
    echo '</form>';

    if (isset($_POST['wpunit_clear_log'])) {
        file_put_contents(WPUNIT_LOG_FILE, '');
        echo '<meta http-equiv="refresh" content="0">';
    }
}

Дополнительные возможности и интеграции

Для повышения полезности можно добавить следующие функции:

  • Отправка email-уведомлений при записи ошибок определенного уровня.
  • Фильтрация вывода по уровню ошибки или по дате.
  • Интеграция с плагином Clearfy Pro для оптимизации и безопасности.
  • Добавление AJAX-подгрузки логов для удобного просмотра больших файлов.

Заключение

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

Если вы хотите использовать готовые решения, рекомендуем обратить внимание на плагины из каталога WPSHOP, в том числе Clearfy Pro для дополнительной оптимизации и безопасности.

Как автоматически проверять здоровье сайта WordPress с помощью WPUnit
16.04.2026
Как использовать метод WPUnit Schedule Event для автоматизации задач в WordPress
05.01.2026
Как удалить корзину WooCommerce и обновить страницу без конфликтов AJAX
17.05.2026
Как создать автоматический импорт пользователей в WordPress с помощью WPUnit
26.02.2026
Как использовать WP-Cron для задач автоматизации в WordPress
05.12.2025