Как добавить логирование ошибок при создании и обновлении заказов WooCommerce

Зачем нужно логирование ошибок при работе с заказами WooCommerce

В процессе создания и обновления заказов в WooCommerce могут возникать различные ошибки: от проблем с данными клиента до сбоев при сохранении заказа. Без логирования сложно понять, что именно пошло не так и где искать проблему. Логирование ошибок позволяет фиксировать детали, которые помогут быстро диагностировать и исправить баги в коде или интеграциях.

Где WooCommerce хранит логи по умолчанию

WooCommerce использует встроенный класс WC_Logger, который сохраняет логи в папку wp-content/uploads/wc-logs. Каждый лог — это отдельный файл с датой и названием, например, fatal-errors-20240621.log.

Вы можете просматривать логи в админке WooCommerce: WooCommerce → Статус → Логи. Там выбирается нужный файл и отображается его содержимое.

Диагностика проблемы: ошибки при создании и обновлении заказов не видны

Если в вашем плагине или кастомном коде, где создаются или обновляются заказы, ошибки не видны, возможно:

  • Ошибки не выводятся и не логируются;
  • Отсутствует вызов логирования;
  • Логи пишутся в нестандартное место или не сохраняются из-за прав доступа;
  • Настройки WP_DEBUG и WP_DEBUG_LOG не включены.

Пошаговое решение: как добавить логирование ошибок в обработку заказов

1. Включите отладку WordPress

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Эти настройки в wp-config.php позволят записывать ошибки в файл wp-content/debug.log без вывода их на экран.

2. Используйте класс WC_Logger для логирования в WooCommerce

Создайте функцию-обертку для записи сообщений в лог заказов:

function log_order_error( $message ) {
    if ( ! class_exists( 'WC_Logger' ) ) {
        return;
    }
    $logger = wc_get_logger();
    $context = array( 'source' => 'order-errors' );
    $logger->error( $message, $context );
}

3. Добавьте логирование ошибок в хуки создания и обновления заказа

Пример: логируем ошибки при сохранении заказа в обработчике woocommerce_checkout_update_order_meta

add_action( 'woocommerce_checkout_update_order_meta', 'my_log_order_errors_on_checkout', 10, 1 );
function my_log_order_errors_on_checkout( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        log_order_error( 'Ошибка: заказ с ID ' . $order_id . ' не найден.' );
        return;
    }

    // Пример проверки: обязательное поле
    $billing_phone = $order->get_billing_phone();
    if ( empty( $billing_phone ) ) {
        log_order_error( 'Ошибка: в заказе ' . $order_id . ' отсутствует телефон клиента.' );
    }

    // Можно добавить другие проверки и логирование
}

4. Логирование исключений при программном создании заказа

Если вы создаете заказ через код, оберните процесс в try-catch и логируйте исключения:

try {
    $order = wc_create_order();
    // добавляем товары, устанавливаем данные...
    $order->calculate_totals();
    $order->save();
} catch ( Exception $e ) {
    log_order_error( 'Ошибка создания заказа: ' . $e->getMessage() );
}

Проверка результата после внедрения логирования

  1. Выполните создание или обновление заказа, намеренно вызвав ошибку (например, оставьте пустым обязательное поле).
  2. Перейдите в админке WooCommerce в раздел Статус → Логи.
  3. Выберите файл логов с именем order-errors-*.
  4. Проверьте, что ваше сообщение об ошибке записано в лог.
  5. Альтернативно проверьте файл wp-content/debug.log, если используете WP_DEBUG_LOG.

Частые ошибки и как их исправить

  • Лог не создаётся или пустой файл: Проверьте права на папку wp-content/uploads/wc-logs и wp-content. Сервер должен иметь права на запись.
  • Класс WC_Logger не найден: Убедитесь, что WooCommerce активен и доступен в момент вызова логирования.
  • Сообщения не появляются в админке: Проверьте правильность параметра source при вызове метода $logger->error(). Он должен совпадать с префиксом в названии лога.
  • Ошибки не логируются при кастомных сценариях: Добавьте отладочные сообщения в ключевых местах, чтобы понять, вызывается ли функция логирования.

Практические советы по безопасности и производительности

  • Не логируйте конфиденциальные данные клиентов, такие как полные номера кредитных карт или пароли.
  • Используйте отдельный контекст source для разных типов логов, чтобы не смешивать данные и упростить поиск.
  • Регулярно очищайте старые логи, чтобы не перегружать диск сервера.
  • Логируйте только важные ошибки, чтобы не создавать избыточный объем данных.

Сравнение способов логирования ошибок в WooCommerce

МетодПреимуществаНедостатки
WC_LoggerИнтеграция с WooCommerce, удобный просмотр логов через админкуТребует правильной настройки source, не подходит для дебага вне WooCommerce
WP_DEBUG_LOGПростая настройка, логирование любых ошибок PHPФайл общий для всего сайта, сложно фильтровать логи заказов
Внешние сервисы (Sentry, Loggly)Расширенный анализ, оповещения, хранение в облакеНеобходима интеграция, дополнительные расходы
WooCommerce: как ограничить доступ к заказам только их авторам
07.05.2026
Автоматическая синхронизация заказов между WordPress и внешними системами
30.03.2026
Создание и использование shortcode в WordPress: подробное руководство с примерами кода
11.11.2025
WooCommerce: автоматическое изменение статусов заказов при проблемах с платежами
10.05.2026
Как создать автоматический отчет по заказам WooCommerce с помощью PHP
07.04.2026