WordPress логирование: полное руководство по аудиту и отслеживанию действий пользователей
Почему логирование критично для любого WordPress‑сайта
Без аудита вы не увидите, кто и какие изменения вносил в контент, плагины или настройки. Это приводит к потере данных, взломам и проблемам с безопасностью. Хорошо настроенное логирование позволяет быстро реагировать на инциденты, проводить форензик‑анализ и соответствовать требованиям GDPR.
Плагины аудита: готовые решения «из коробки»
Для большинства проектов достаточно установить один из проверенных плагинов. Ниже – три лидера 2026‑го года.
- WP Activity Log – более 200 000 активных установок, детальный журнал действий администраторов, редакторов и пользователей.
- Activity Log от WPBox – лёгкий, поддерживает экспорт в CSV и интеграцию с Slack.
- Simple History – простой интерфейс, запись в файл
debug.logи возможность отправки по email.
Все плагины сохраняют логи в базу wp_usermeta или отдельную таблицу, что упрощает последующий поиск.
Ручное логирование в базе данных
Если нужен кастомный набор полей или минимальная нагрузка, можно написать собственный обработчик.
Создание таблицы для логов
function wpb_create_log_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'custom_log';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT(20) UNSIGNED NOT NULL,
action VARCHAR(255) NOT NULL,
description TEXT NULL,
ip VARCHAR(45) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta( $sql );
}
register_activation_hook( __FILE__, 'wpb_create_log_table' ); Функция записи лога
function wpb_log_action( $action, $description = '' ) {
if ( ! is_user_logged_in() ) return;
global $wpdb;
$table = $wpdb->prefix . 'custom_log';
$wpdb->insert( $table, array(
'user_id' => get_current_user_id(),
'action' => sanitize_text_field( $action ),
'description'=> wp_kses_post( $description ),
'ip' => $_SERVER['REMOTE_ADDR'],
), array('%d','%s','%s','%s') );
}
// Пример: логируем публикацию поста
add_action( 'publish_post', function( $post_ID ) {
wpb_log_action( 'publish_post', "Post ID $post_ID published" );
}); Такой подход даёт полную свободу: вы решаете, какие события фиксировать и в каком виде.
Отправка логов на внешний сервер
Для масштабных проектов часто используют централизованные системы (ELK, Graylog, Splunk). Ниже – простой способ отправки по HTTP POST.
Настройка webhook‑а
function wpb_send_log_to_remote( $log_entry ) {
$endpoint = 'https://logserver.example.com/api/wordpress';
$args = array(
'body' => json_encode( $log_entry ),
'headers' => array(
'Content-Type' => 'application/json',
'Authorization'=> 'Bearer YOUR_TOKEN',
),
'timeout' => 5,
);
wp_remote_post( $endpoint, $args );
}
function wpb_log_and_send( $action, $desc = '' ) {
$log = array(
'user_id' => get_current_user_id(),
'action' => $action,
'description'=> $desc,
'ip' => $_SERVER['REMOTE_ADDR'],
'time' => current_time('mysql'),
);
wpb_log_action( $action, $desc ); // запись в БД
wpb_send_log_to_remote( $log ); // отправка наружу
}
add_action( 'wp_login', function(){ wpb_log_and_send('login_success','User logged in'); }); Не забудьте включить WP_DEBUG и проверять ответы сервера, иначе вы потеряете часть данных.
Лучшие практики и рекомендации
- Храните логи не менее 90 дней. Это минимум для расследования инцидентов.
- Ограничьте доступ к таблице логов. Добавьте правило
CAPABILITYтолько для администраторов. - Управляйте размером файлов. При использовании
debug.logвключитеlog_rotationчерез cron. - Шифруйте передачу. Если отправляете логи наружу, используйте HTTPS (см. Полный гайд: HTTPS в WordPress).
- Интегрируйте с CDN. При работе с Cloudflare или Bunny CDN можно добавить правила firewall, блокирующие подозрительные IP (подробно в статье CDN WordPress настройка).
- Тестируйте на staging. Прежде чем включать детальное логирование в продакшн, проверьте нагрузку на базу.
- Автоматизируйте оповещения. Настройте webhook в Slack или Telegram, используя плагин Activity Log.
Следуя этим рекомендациям, вы сведёте к минимуму риски и получите мощный инструмент для поддержки и развития сайта.
Заключение
Логирование WordPress – это не просто «красивый» функционал, а обязательный элемент любой профессиональной инфраструктуры. Выберите подходящий плагин, либо реализуйте кастомный механизм, и не забудьте о централизованной отправке и безопасном хранении. При правильной настройке вы сможете быстро находить причины ошибок, фиксировать несанкционированные действия и поддерживать высокий уровень безопасности.
Если вы планируете масштабировать проект, обратите внимание на выбор VPS (см. Как правильно выбрать VPS для WordPress) и контейнеризацию с Docker (Docker + WordPress гайд).
❓ Часто задаваемые вопросы
Какой плагин лучше подходит для небольших сайтов?
Для небольших проектов достаточно Simple History – он лёгок, записывает в файл debug.log и поддерживает отправку по email.
Можно ли хранить логи в отдельной таблице без плагина?
Да, создайте свою таблицу через dbDelta и используйте функции wp_insert() для записи; пример кода приведён в статье.
Как отправлять логи в сторонний сервис безопасно?
Отправляйте их через HTTPS, используя wp_remote_post с токеном авторизации и JSON‑тела, как показано в примере.
Нужен ли отдельный сервер для логов?
Для больших сайтов рекомендуется централизованный лог‑сервер (ELK, Graylog). Для небольших достаточно внешнего webhook‑а.