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

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

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

Стандартные методы отладки в WordPress включают WP_DEBUG и системный error_log, но они не всегда удобны для комплексного мониторинга. Создание собственного логгера даёт следующие преимущества:

  • централизованное хранение логов в отдельном файле с удобным форматом;
  • фильтрация и классификация сообщений по уровням (info, warning, error);
  • автоматическое время и контекст вызова с возможностью расширения;
  • интеграция в административную панель для быстрого просмотра;
  • возможность отправки уведомлений при критических ошибках.

Это значительно облегчает процесс отладки и контроля за состоянием сайта.

Создание базового логгера: структура и функции

Начнём с создания базового класса логгера в WordPress. Мы создадим класс WPKit_Logger, который будет записывать сообщения в файл wp-content/wpkit_logs/debug.log. При этом мы реализуем уровни логов и автоматическое добавление временных меток.

class WPKit_Logger {
    private static $log_file;
    private static $levels = [
        'info' => 'INFO',
        'warning' => 'WARNING',
        'error' => 'ERROR'
    ];

    public static function init() {
        if ( ! file_exists(WP_CONTENT_DIR . '/wpkit_logs') ) {
            mkdir(WP_CONTENT_DIR . '/wpkit_logs', 0755, true);
        }
        self::$log_file = WP_CONTENT_DIR . '/wpkit_logs/debug.log';
    }

    public static function log($message, $level = 'info') {
        if (!isset(self::$levels[$level])) {
            $level = 'info';
        }
        $time = date('Y-m-d H:i:s');
        $formatted = sprintf("[%s] [%s] %s\n", $time, self::$levels[$level], $message);
        error_log($formatted, 3, self::$log_file);
    }
}

// Инициализация логгера при загрузке плагина или темы
WPKit_Logger::init();

Этот класс создаёт папку wpkit_logs в каталоге wp-content и пишет лог в файл debug.log. Метод log принимает сообщение и уровень логирования.

Пример использования базового логгера

Вот как можно использовать логгер в коде:

WPKit_Logger::log('Пользователь успешно авторизовался', 'info');
WPKit_Logger::log('Не удалось загрузить данные из API', 'warning');
WPKit_Logger::log('Фатальная ошибка: отсутствует файл конфигурации', 'error');

Такие записи появятся в файле debug.log с отметками времени и уровнем.

Автоматическая запись ошибок PHP и исключений в лог

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

function wpkit_error_handler($errno, $errstr, $errfile, $errline) {
    $message = "Ошибка PHP [$errno]: $errstr в файле $errfile на строке $errline";
    WPKit_Logger::log($message, 'error');
    return false; // Позволяет обработке ошибки продолжиться
}

function wpkit_exception_handler($exception) {
    $message = 'Исключение: ' . $exception->getMessage() . ' в файле ' . $exception->getFile() . ' на строке ' . $exception->getLine();
    WPKit_Logger::log($message, 'error');
}

set_error_handler('wpkit_error_handler');
set_exception_handler('wpkit_exception_handler');

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

Интеграция логов в административную панель WordPress

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

function wpkit_admin_menu() {
    add_menu_page(
        'WPKit Логгер',
        'WPKit Логгер',
        'manage_options',
        'wpkit-logger',
        'wpkit_logger_page',
        'dashicons-analytics',
        81
    );
}
add_action('admin_menu', 'wpkit_admin_menu');

function wpkit_logger_page() {
    if ( ! current_user_can('manage_options') ) {
        wp_die('Доступ запрещён');
    }
    echo '<div class="wrap"><h1>WPKit Логгер</h1>';
    $log_file = WP_CONTENT_DIR . '/wpkit_logs/debug.log';
    if (file_exists($log_file)) {
        $lines = array_slice(file($log_file), -100);
        echo '<pre style="background:#f1f1f1;padding:10px;overflow:auto;max-height:600px;">';
        foreach ($lines as $line) {
            echo esc_html($line);
        }
        echo '</pre>';
    } else {
        echo '<p>Лог файл не найден.</p>';
    }
    echo '</div>';
}

Теперь в админ-панели появится раздел «WPKit Логгер», где можно быстро просмотреть последние записи из лога без доступа к серверу.

Расширение функционала: фильтрация и уведомления

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

Также полезно реализовать уведомления по email при записи ошибок определённого уровня. Вот пример добавления отправки письма при ошибках уровня error:

public static function log($message, $level = 'info') {
    if (!isset(self::$levels[$level])) {
        $level = 'info';
    }
    $time = date('Y-m-d H:i:s');
    $formatted = sprintf("[%s] [%s] %s\n", $time, self::$levels[$level], $message);
    error_log($formatted, 3, self::$log_file);

    if ($level === 'error') {
        wp_mail(
            get_option('admin_email'),
            'WPKit: Ошибка на сайте',
            $formatted
        );
    }
}

Это гарантирует, что администраторы быстро узнают о критических проблемах.

Альтернативные плагины для логирования в WordPress

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

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

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

Советы по безопасности и производительности

При использовании логгера не забывайте:

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

Соблюдение этих правил поможет избежать утечек данных и снижает нагрузку на сервер.

Как удалить заблокированные плагины в WordPress без риска
26.01.2026
Как создать автоматическую систему отслеживания ошибок в WordPress
03.04.2026
WooCommerce: как заблокировать оплату при наличии товаров с определёнными атрибутами в корзине
07.06.2026
WooCommerce: автоматическое изменение стоимости товаров при оплате с поддержкой купонов
26.05.2026
WooCommerce: автоматическое удаление неактивных заказов
19.07.2026