Зачем нужно логирование ошибок при работе с заказами 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() );
}Проверка результата после внедрения логирования
- Выполните создание или обновление заказа, намеренно вызвав ошибку (например, оставьте пустым обязательное поле).
- Перейдите в админке WooCommerce в раздел Статус → Логи.
- Выберите файл логов с именем
order-errors-*. - Проверьте, что ваше сообщение об ошибке записано в лог.
- Альтернативно проверьте файл
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) | Расширенный анализ, оповещения, хранение в облаке | Необходима интеграция, дополнительные расходы |