При разработке и эксплуатации сайтов на WordPress очень важно оперативно узнавать о возникающих ошибках и предупреждениях, чтобы быстро реагировать и предотвращать негативные последствия для пользователей и SEO. В этой статье рассмотрим, как организовать автоматическую систему сбора и отправки отчетов об ошибках PHP и WordPress с уведомлением на электронную почту, а также логированием в отдельный файл.
Почему важно автоматизировать сбор ошибок PHP и WordPress
По умолчанию WordPress выводит ошибки в лог PHP, если включена соответствующая настройка, или на экран в режиме отладки. Однако для сайтов в продакшене это неудобно, так как ошибки могут оставаться незамеченными долгое время. Автоматический отчет позволит:
- получать уведомления о критичных ошибках сразу после их возникновения;
- собирать подробную информацию о проблемах для быстрого устранения;
- отслеживать тренды ошибок и предупреждений;
- повысить стабильность и безопасность сайта.
Настройка логирования ошибок в WordPress
Для начала убедимся, что WordPress и PHP настроены на логирование ошибок. В wp-config.php добавьте или проверьте следующие строки:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true); // ошибки пишутся в wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // ошибки не выводятся на экран
Это позволит собирать ошибки в файл wp-content/debug.log, не показывая их посетителям сайта.
Выбор места для логов и формата
Если нужен отдельный файл для логов ошибок, можно в php.ini или через код задать путь к файлу:
ini_set('error_log', WP_CONTENT_DIR . '/error-report.log');
Это позволит отделить ошибки WordPress от системных.
Создание функции wpco_send_error_report — отправка email с ошибками
Далее реализуем функцию, которая раз в сутки будет читать файл с ошибками, формировать отчет и отправлять его на указанный email, после чего очищать файл. Для этого используем WP-Cron.
Регистрация задачи в WP-Cron
add_action('wpco_daily_error_report', 'wpco_send_error_report');
if (!wp_next_scheduled('wpco_daily_error_report')) {
wp_schedule_event(time(), 'daily', 'wpco_daily_error_report');
}
Основная функция отправки отчета
function wpco_send_error_report() {
$log_file = WP_CONTENT_DIR . '/debug.log';
if (!file_exists($log_file)) {
return; // Файл не найден
}
$log_content = file_get_contents($log_file);
if (empty($log_content)) {
return; // Нет новых ошибок
}
$to = 'admin@example.com'; // Замените на ваш email
$subject = 'Ежедневный отчет об ошибках WordPress';
$message = "Здравствуйте,\n\nВот отчет об ошибках, возникших за последние сутки:\n\n" . $log_content;
$headers = ['Content-Type: text/plain; charset=UTF-8'];
wp_mail($to, $subject, $message, $headers);
// Очистка файла после отправки
file_put_contents($log_file, '');
}
Улучшение: фильтрация и форматирование ошибок
В реальных условиях в логе может быть много незначительных предупреждений. Можно добавить фильтрацию по уровню ошибок или по времени. Например, читать только последние 24 часа.
Для этого можно парсить строки лога с помощью регулярных выражений, выделять дату и тип ошибки, формировать структурированный отчет.
Пример выделения ошибок за последние 24 часа
function wpco_get_recent_errors($log_file) {
$lines = file($log_file);
$filtered = [];
$now = time();
foreach ($lines as $line) {
if (preg_match('/\[(.*?)\]/', $line, $matches)) {
$date_str = $matches[1];
$timestamp = strtotime($date_str);
if ($timestamp && ($now - $timestamp) <= 86400) { // 24 часа
$filtered[] = $line;
}
}
}
return implode('', $filtered);
}
Далее вместо полного содержимого файла используйте wpco_get_recent_errors($log_file) для формирования отчета.
Плагины для расширенного логирования и отчетности
Если хочется готовое решение с удобным интерфейсом и расширенными возможностями, можно использовать плагины:
- WP Activity Log — подробный аудит всех действий на сайте, включая ошибки.
- Error Log Monitor — показывает последние ошибки PHP прямо в админке, с возможностью отправки уведомлений.
- Clearfy Pro — оптимизация и безопасность, включая расширенные настройки логирования ошибок.
Для интеграции с этими плагинами можно дополнительно создавать кастомные уведомления и фильтры.
Как интегрировать отправку отчетов в WP-Cron и улучшить надежность
WP-Cron зависит от посещаемости сайта. Для сайтов с низкой посещаемостью можно настроить системный cron на сервере, который будет вызывать wp-cron.php регулярно:
* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Это гарантирует своевременное выполнение отправки отчетов.
Выводы и рекомендации
Автоматический отчет об ошибках — мощный инструмент контроля состояния сайта. Даже базовая реализация с чтением debug.log и отправкой email поможет быстро получать информацию о проблемах.
Для сложных проектов полезно использовать готовые плагины с расширенными возможностями, например, Clearfy Pro.
Обязательно настроите правильные права доступа к файлам логов и защищайте email от спама.