В повседневной работе с 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).
- Реализовывать ротацию логов, чтобы не занимали много места.
- При необходимости выводить логи в админке для удобного мониторинга.
Такой подход значительно упростит поиск и устранение ошибок, а также позволит анализировать поведение пользователей и работу сайта.