В процессе разработки и поддержки сайтов на WordPress частым вызовом становится необходимость детального логирования событий и ошибок вне стандартных возможностей отладки. В этой статье разберём, как с помощью собственного кода и готовых плагинов расширить логирование в WordPress, чтобы получать более информативные данные для анализа и устранения проблем.
Зачем нужно дополнительное логирование в WordPress
Стандартные возможности WordPress по логированию ошибок ограничены и часто не дают полного понимания, что происходит внутри сайта. Логирование может помочь:
- Отслеживать пользовательские действия и события;
- Фиксировать ошибки и исключения с подробной информацией;
- Анализировать производительность и узкие места;
- Отслеживать запросы к API и сторонним сервисам.
Без дополнительного логирования поиск причин проблем превращается в долгий и сложный процесс.
Как настроить базовое логирование ошибок в WordPress
Для начала убедимся, что включено логирование ошибок PHP и WordPress. В wp-config.php добавьте или измените следующие строки:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Это включит режим отладки, запишет ошибки в файл wp-content/debug.log и скроет их с экрана пользователя. Однако такие логи часто содержат только системные ошибки и мало полезной информации про бизнес-логику.
Создание собственного логгера для WordPress: пример кода
Реализуем функцию wptavern_log_message(), которая будет записывать сообщения в отдельный лог-файл с дополнительной информацией.
function wptavern_log_message($message, $level = 'INFO') {
if (!defined('WP_CONTENT_DIR')) {
return;
}
$log_dir = WP_CONTENT_DIR . '/wptavern-logs';
if (!file_exists($log_dir)) {
mkdir($log_dir, 0755, true);
}
$log_file = $log_dir . '/custom.log';
$date = date('Y-m-d H:i:s');
if (is_array($message) || is_object($message)) {
$message = print_r($message, true);
}
$log_entry = "[{$date}] [{$level}] {$message}\n";
file_put_contents($log_file, $log_entry, FILE_APPEND);
}
Теперь можно вызывать wptavern_log_message('Текст сообщения', 'ERROR'); из любых частей темы или плагинов.
Пример использования собственного логгера при обработке AJAX
Допустим, у вас есть AJAX обработчик, и вы хотите логировать ошибки:
add_action('wp_ajax_wptavern_save_data', 'wptavern_save_data_handler');
function wptavern_save_data_handler() {
$data = isset($_POST['data']) ? sanitize_text_field($_POST['data']) : '';
if (empty($data)) {
wptavern_log_message('Пустые данные в AJAX запросе', 'ERROR');
wp_send_json_error('Данные не переданы');
}
// Обработка данных
wptavern_log_message('Данные успешно получены: ' . $data);
wp_send_json_success('Данные сохранены');
}
Использование готовых плагинов для расширенного логирования
Если не хочется писать свой код, можно воспользоваться проверенными плагинами:
- WP Activity Log — мощный плагин для ведения подробного журнала активности пользователей и системных событий.
- Query Monitor — позволяет отслеживать запросы, ошибки PHP, хуки и другую информацию в удобном интерфейсе.
- Error Log Monitor — плагин для мониторинга PHP ошибок прямо в админке.
Для установки и настройки плагинов обязательно проверьте совместимость с вашей версией WordPress.
Как интегрировать логирование с плагином Clearfy Pro
Плагин Clearfy Pro предлагает расширенные настройки оптимизации и безопасности, включая управление логами и отключение лишних функций. Хотя в нем нет отдельного логгера, его можно использовать для минимизации «шума» в логах за счёт отключения ненужных действий и запросов.
Советы по безопасности и производительности при логировании
При добавлении логирования важно учитывать несколько моментов:
- Не логируйте чувствительные данные (пароли, ключи API, персональную информацию). Если нужно — используйте маскирование.
- Ограничьте размер логов, периодически архивируйте или очищайте их, чтобы не заполнять диск.
- Используйте уровни логирования (INFO, WARNING, ERROR) для фильтрации сообщений.
- Не выводите логи на публичной части сайта, чтобы не раскрывать внутреннюю информацию.
Автоматическая очистка логов
Можно добавить в functions.php задачу для удаления старых логов:
add_action('wptavern_cleanup_logs_daily', 'wptavern_cleanup_logs');
function wptavern_cleanup_logs() {
$log_dir = WP_CONTENT_DIR . '/wptavern-logs';
if (!is_dir($log_dir)) return;
$files = glob($log_dir . '/*.log');
$now = time();
foreach ($files as $file) {
if (is_file($file) && ($now - filemtime($file)) > 30 * DAY_IN_SECONDS) {
unlink($file);
}
}
}
if (!wp_next_scheduled('wptavern_cleanup_logs_daily')) {
wp_schedule_event(time(), 'daily', 'wptavern_cleanup_logs_daily');
}
Выводы
Расширенное логирование в WordPress — это мощный инструмент для разработчиков и администраторов, позволяющий быстро выявлять и устранять проблемы, а также анализировать поведение сайта. Собственный логгер даёт гибкость и контроль, а плагиновые решения облегчают настройку и мониторинг. Обязательно следите за безопасностью и производительностью при использовании логов.