В процессе разработки и сопровождения сайтов на WordPress часто возникает необходимость вести системный лог для отладки, мониторинга ошибок и анализа поведения сайта. В этой статье мы рассмотрим, как создать собственный автоматический логгер в WordPress, который будет записывать важные события и ошибки в отдельный файл, а также как интегрировать вывод логов в админ-панели.
Зачем нужен автоматический логгер в WordPress
Стандартные методы отладки в WordPress включают WP_DEBUG и системный error_log, но они не всегда удобны для комплексного мониторинга. Создание собственного логгера даёт следующие преимущества:
- централизованное хранение логов в отдельном файле с удобным форматом;
- фильтрация и классификация сообщений по уровням (info, warning, error);
- автоматическое время и контекст вызова с возможностью расширения;
- интеграция в административную панель для быстрого просмотра;
- возможность отправки уведомлений при критических ошибках.
Это значительно облегчает процесс отладки и контроля за состоянием сайта.
Создание базового логгера: структура и функции
Начнём с создания базового класса логгера в WordPress. Мы создадим класс WPKit_Logger, который будет записывать сообщения в файл wp-content/wpkit_logs/debug.log. При этом мы реализуем уровни логов и автоматическое добавление временных меток.
class WPKit_Logger {
private static $log_file;
private static $levels = [
'info' => 'INFO',
'warning' => 'WARNING',
'error' => 'ERROR'
];
public static function init() {
if ( ! file_exists(WP_CONTENT_DIR . '/wpkit_logs') ) {
mkdir(WP_CONTENT_DIR . '/wpkit_logs', 0755, true);
}
self::$log_file = WP_CONTENT_DIR . '/wpkit_logs/debug.log';
}
public static function log($message, $level = 'info') {
if (!isset(self::$levels[$level])) {
$level = 'info';
}
$time = date('Y-m-d H:i:s');
$formatted = sprintf("[%s] [%s] %s\n", $time, self::$levels[$level], $message);
error_log($formatted, 3, self::$log_file);
}
}
// Инициализация логгера при загрузке плагина или темы
WPKit_Logger::init();Этот класс создаёт папку wpkit_logs в каталоге wp-content и пишет лог в файл debug.log. Метод log принимает сообщение и уровень логирования.
Пример использования базового логгера
Вот как можно использовать логгер в коде:
WPKit_Logger::log('Пользователь успешно авторизовался', 'info');
WPKit_Logger::log('Не удалось загрузить данные из API', 'warning');
WPKit_Logger::log('Фатальная ошибка: отсутствует файл конфигурации', 'error');Такие записи появятся в файле debug.log с отметками времени и уровнем.
Автоматическая запись ошибок PHP и исключений в лог
Для удобства мониторинга полезно автоматически перехватывать PHP ошибки и исключения и записывать их в наш лог. Добавим обработчики ошибок и исключений:
function wpkit_error_handler($errno, $errstr, $errfile, $errline) {
$message = "Ошибка PHP [$errno]: $errstr в файле $errfile на строке $errline";
WPKit_Logger::log($message, 'error');
return false; // Позволяет обработке ошибки продолжиться
}
function wpkit_exception_handler($exception) {
$message = 'Исключение: ' . $exception->getMessage() . ' в файле ' . $exception->getFile() . ' на строке ' . $exception->getLine();
WPKit_Logger::log($message, 'error');
}
set_error_handler('wpkit_error_handler');
set_exception_handler('wpkit_exception_handler');Теперь любые ошибки PHP и необработанные исключения будут попадать в лог автоматически, что значительно упрощает диагностику проблем.
Интеграция логов в административную панель WordPress
Чтобы удобно просматривать логи, добавим страницу в админ-меню WordPress с выводом последних 100 строк файла логов.
function wpkit_admin_menu() {
add_menu_page(
'WPKit Логгер',
'WPKit Логгер',
'manage_options',
'wpkit-logger',
'wpkit_logger_page',
'dashicons-analytics',
81
);
}
add_action('admin_menu', 'wpkit_admin_menu');
function wpkit_logger_page() {
if ( ! current_user_can('manage_options') ) {
wp_die('Доступ запрещён');
}
echo '<div class="wrap"><h1>WPKit Логгер</h1>';
$log_file = WP_CONTENT_DIR . '/wpkit_logs/debug.log';
if (file_exists($log_file)) {
$lines = array_slice(file($log_file), -100);
echo '<pre style="background:#f1f1f1;padding:10px;overflow:auto;max-height:600px;">';
foreach ($lines as $line) {
echo esc_html($line);
}
echo '</pre>';
} else {
echo '<p>Лог файл не найден.</p>';
}
echo '</div>';
}Теперь в админ-панели появится раздел «WPKit Логгер», где можно быстро просмотреть последние записи из лога без доступа к серверу.
Расширение функционала: фильтрация и уведомления
Вы можете дополнить логгер фильтрами по уровню логов. Например, выводить на странице только ошибки или предупреждения. Для этого модифицируйте функцию wpkit_logger_page, добавив форму для выбора уровня и фильтрацию массива строк.
Также полезно реализовать уведомления по email при записи ошибок определённого уровня. Вот пример добавления отправки письма при ошибках уровня error:
public static function log($message, $level = 'info') {
if (!isset(self::$levels[$level])) {
$level = 'info';
}
$time = date('Y-m-d H:i:s');
$formatted = sprintf("[%s] [%s] %s\n", $time, self::$levels[$level], $message);
error_log($formatted, 3, self::$log_file);
if ($level === 'error') {
wp_mail(
get_option('admin_email'),
'WPKit: Ошибка на сайте',
$formatted
);
}
}Это гарантирует, что администраторы быстро узнают о критических проблемах.
Альтернативные плагины для логирования в WordPress
Если вы предпочитаете готовые решения, можно рассмотреть плагины, которые расширяют возможности логирования:
- WP Activity Log — подробный аудит активности пользователей и системных событий;
- Clearfy Pro — включает инструменты оптимизации и логирования ошибок;
- Query Monitor — мощный инструмент для отладки запросов, ошибок и хуков.
Однако собственный логгер удобен тем, что вы контролируете формат и логику записи, и он не нагружает систему лишними функциями.
Советы по безопасности и производительности
При использовании логгера не забывайте:
- защищать папку с логами от публичного доступа через
.htaccessили конфигурацию сервера; - регулярно архивировать и очищать файлы логов, чтобы они не занимали слишком много места;
- ограничивать вывод логов в админке только для пользователей с правами администратора;
- не логировать чувствительную информацию, такую как пароли или личные данные.
Соблюдение этих правил поможет избежать утечек данных и снижает нагрузку на сервер.