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

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

Почему нужен собственный лог в WordPress

WordPress по умолчанию ведёт базовое логирование ошибок PHP, если включено отображение ошибок или запись в лог сервера. Однако этого часто недостаточно, потому что:

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

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

  • Логировать любые события — от ошибок до действий пользователей.
  • Использовать удобные форматы и хранение (файл, БД или внешние сервисы).
  • Добавлять контекст (пользователь, время, IP, дополнительные данные).
  • Создавать фильтры и отчёты.

Как настроить базовое логирование ошибок в WordPress

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

В файл wp-config.php добавьте или измените следующие строки:

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

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

Плагины для расширенного логирования

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

  • WP Activity Log — расширенный аудит действий пользователей, поддержка фильтров, уведомлений.
  • Simple History — сохранение истории изменений в админке, в том числе публикаций, обновлений.
  • Error Log Monitor — мониторинг и уведомления о новых ошибках PHP.

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

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

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

Функция записи лога

Создадим функцию wpexamples_write_log, которая будет принимать сообщение и записывать его в файл wp-content/wpexamples-log.log:

function wpexamples_write_log($message) {
    if (is_array($message) || is_object($message)) {
        $message = print_r($message, true);
    }
    $log_file = WP_CONTENT_DIR . '/wpexamples-log.log';
    $date = date('Y-m-d H:i:s');
    $message = "[{$date}] " . $message . "\n";
    error_log($message, 3, $log_file);
}

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

Пример использования: логирование ошибок формы

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

add_action('init', function() {
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['contact_form'])) {
        $errors = [];
        if (empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $errors[] = 'Неверный email';
        }
        if (!empty($errors)) {
            wpexamples_write_log(['Ошибка формы', 'errors' => $errors, 'post_data' => $_POST]);
        }
    }
});

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

Логирование пользовательских действий в WordPress

Часто важно фиксировать действия пользователей, например, вход в систему, изменения контента, публикации. Сделаем простой пример логирования входа пользователя:

add_action('wp_login', function($user_login, $user) {
    wpexamples_write_log("Пользователь вошёл: " . $user_login . " (ID: " . $user->ID . ")");
}, 10, 2);

Добавим также пример логирования изменения записи:

add_action('post_updated', function($post_ID, $post_after, $post_before) {
    wpexamples_write_log(["Обновлена запись", 'ID' => $post_ID, 'Старая версия' => $post_before->post_title, 'Новая версия' => $post_after->post_title]);
}, 10, 3);

Это позволит получать подробные логи активности на сайте.

Улучшение логгера: фильтрация, ротация и форматирование

Для реальных проектов полезно добавить:

  • Ротацию логов — чтобы файлы не разрастались до гигабайт. Можно создавать новый файл по дате или размеру.
  • Форматирование в JSON — для удобного парсинга и интеграции с внешними системами.
  • Фильтрацию по уровню важности — например, info, warning, error.

Пример расширенной функции:

function wpexamples_write_log($message, $level = 'info') {
    if (is_array($message) || is_object($message)) {
        $message = json_encode($message, JSON_UNESCAPED_UNICODE);
    }
    $log_file = WP_CONTENT_DIR . '/wpexamples-log-' . date('Y-m-d') . '.log';
    $date = date('Y-m-d H:i:s');
    $log_entry = json_encode([
        'date' => $date,
        'level' => $level,
        'message' => $message
    ], JSON_UNESCAPED_UNICODE) . "\n";
    error_log($log_entry, 3, $log_file);
}
<

Теперь каждый день будет создаваться отдельный файл лога, куда пишутся структурированные JSON-строки с указанием уровня важности.

Вывод логов в админке WordPress

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

add_action('admin_menu', function() {
    add_menu_page('WPEXamples Лог', 'WPEXamples Лог', 'manage_options', 'wpexamples-log', 'wpexamples_render_log_page');
});

function wpexamples_render_log_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Доступ запрещён');
    }
    $log_file = WP_CONTENT_DIR . '/wpexamples-log-' . date('Y-m-d') . '.log';
    echo '<h1>Лог WPEXamples</h1>';
    if (!file_exists($log_file)) {
        echo '<p>Лог за сегодня отсутствует.</p>';
        return;
    }
    $lines = file($log_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    $last_lines = array_slice($lines, -50);
    echo '<pre style="max-height:500px;overflow:auto;background:#f9f9f9;padding:10px;border:1px solid #ccc;">'.implode("\n", $last_lines).'</pre>';
}

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

Резюме и рекомендации по внедрению логгирования

Создание собственного логгера в WordPress — мощный инструмент для контроля и отладки. Рекомендуется:

  • Всегда включать базовое логирование ошибок в wp-config.php.
  • Использовать собственные функции для логирования специфичных событий.
  • Добавлять контекст (пользователь, IP, URL).
  • Реализовывать ротацию логов, чтобы не занимали много места.
  • При необходимости выводить логи в админке для удобного мониторинга.

Такой подход значительно упростит поиск и устранение ошибок, а также позволит анализировать поведение пользователей и работу сайта.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматическое сохранение через AJAX в WordPress
02.12.2025
Как автоматически удалять спам комментарии в WordPress: практические решения
04.01.2026
Как создать свой виджет в WordPress с примерами кода
15.11.2025
Как создать свое API в WordPress: подробное руководство с примерами кода
02.12.2025
Как создать динамический попап в WordPress на AJAX с примером кода
27.02.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше