Налаштування логування процесу автонаповнення 1С-Бітрікс

Уявіть: ви запустили парсинг каталогу з 10 000 товарів, через годину дивитеся — імпортувалося всього 300. Без логів — гадання: чи джерело повернуло порожню сторінку, чи XPath зламався, чи ліміт пам'яті PHP закінчився на 50 000-му товарі. З логами — одразу бачите, що на 501-му товарі впав memory limi
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування логування процесу автонаповнення 1С-Бітрікс
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1466
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    811
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1167

Уявіть: ви запустили парсинг каталогу з 10 000 товарів, через годину дивитеся — імпортувалося всього 300. Без логів — гадання: чи джерело повернуло порожню сторінку, чи XPath зламався, чи ліміт пам'яті PHP закінчився на 50 000-му товарі. З логами — одразу бачите, що на 501-му товарі впав memory limit за 128 МБ. Налаштування структурованого логування — не розкіш, а необхідність для будь-якого проєкту з автонаповненням. Наш досвід показує, що правильна конфігурація скорочує час розбору інциденту з годин до хвилин. На одному проєкті ми прискорили пошук помилок у 6 разів, впровадивши єдиний формат з контекстом і ротацією. Розберемо, як організувати логи так, щоб не витрачати час на гадання.

"Без контексту логи — це шум. Ми перестали гадати, коли додали контекст у кожен виклик." — Іван, провідний розробник проєкту з 5000+ сутностей.

Рівні логування

Використовуйте стандартні рівні PSR-3, навіть якщо не підключаєте Monolog. Рівні керують обсягом інформації, що записується:

  • DEBUG — кожен HTTP-запит до джерела, час відповіді, розмір body. Вмикається лише під час налагодження через прапорець в адмінці.
  • INFO — старт/стоп парсера, кількість оброблених елементів, кількість створених/оновлених записів в інфоблоці.
  • WARNING — пропущений елемент (не пройшов валідацію), повільна відповідь джерела (>5 сек), повторна спроба запиту.
  • ERROR — виняток під час парсингу, помилка запису в b_iblock_element, невалідна відповідь API.

У продакшні тримайте рівень INFO. Перемикання на DEBUG — через налаштування в b_option або файл /local/parser_debug.flag, без перезапуску та деплою. Ця гнучкість дозволяє безпечно діагностувати проблеми на живому проєкті.

Куди писати логи: файл, b_event_log чи кастомна таблиця?

Вибір сховища залежить від інтенсивності парсингу та вимог до аналітики. Порівняємо варіанти:

Критерій Файлова система b_event_log Кастомна таблиця
Простота інтеграції Висока (fopen) Середня (API Бітрікс) Низька (міграція)
Продуктивність при 1000 записів/хв Відмінно Погано (гальмує) Добре
Пошук і фільтрація grep/awk Адмінка SQL-запити
Ротація logrotate Не потрібна Налаштовується
Аналітичні звіти Скриптами Обмежено Будь-які

Файлова система. Пишемо в /local/logs/parser/YYYY-MM-DD.log. Формат рядка: [2024-03-15 14:23:01] INFO | source=competitor_a | action=update | iblock_id=12 | element_id=45678 | duration=0.34s. Кожен рядок — одна подія. Роздільник | зручний для grep і awk. Обов'язкові поля: timestamp, level, source, action. Ротація — через logrotate або власний агент, що видаляє файли старші 30 днів. Без ротації логи DEBUG-рівня за тиждень легко займуть гігабайти.

Таблиця b_event_log. Штатний журнал Бітрікс. Виклик CEventLog::Add() з параметрами. Плюс — перегляд через адмінку, фільтрація, доступ для менеджерів без SSH. Мінус — таблиця не розрахована на тисячі записів за хвилину, при інтенсивному парсингу гальмує. Тому b_event_log використовуйте для WARNING і ERROR, а DEBUG пишіть у файл.

Кастомна таблиця. Створюємо таблицю parser_log з полями id, created_at, level, source, action, element_id, message, context (JSON). Індекс по (created_at, level, source). Це оптимальний варіант для проєктів, де парсер — критична підсистема, і потрібні аналітичні запити по логах. Наприклад, можна швидко порахувати кількість помилок за джерелами за останню годину.

Що важливіше: рівень чи контекст?

Рядок «Помилка парсингу» марний. Корисний рядок: «XPath //div[@class="price"]/span повернув 0 вузлів, очікувалося 1, URL: https://source.com/product/123, HTTP 200, body size: 45KB». Контекст дозволяє відтворити проблему без повторного запуску. Мінімальний контекст для кожного рівня:

Рівень Обов'язковий контекст
DEBUG URL, HTTP-код, час відповіді, розмір body, User-Agent
INFO Джерело, дія, ID елемента інфоблоку, результат (created/updated/skipped)
WARNING Джерело, URL, причина пропуску, значення поля, очікуваний формат
ERROR Все вище плюс stack trace, memory_get_peak_usage(), вміст $arFields

Як налаштувати клас ParserLogger?

Створіть клас ParserLogger у /local/php_interface/classes/ (або в просторі імен вашого модуля). Інтерфейс:

ParserLogger::info('import', [ 'source' => 'competitor_a', 'element_id' => 45678, 'action' => 'update', 'fields_changed' => ['PRICE', 'QUANTITY'], ]); 

Всередині — запис у файл + у b_event_log для рівнів WARNING і вище. Перемикання рівня — через COption::GetOptionString('parser', 'log_level', 'INFO'). Цей підхід дає єдину точку конфігурації.

Покрокова інструкція з впровадження ParserLogger
  1. Створіть файл /local/php_interface/classes/ParserLogger.php з namespace Bitrix\Parser.
  2. Реалізуйте методи debug(), info(), warning(), error() з сигнатурою function (string $action, array $context = []).
  3. У кожному методі формуйте рядок логу і пишіть у файл через error_log з прапором FILE_APPEND.
  4. Для WARNING і ERROR додатково викликайте CEventLog::Add().
  5. Додайте метод setLevel($level), що читає з COption.
  6. Автозавантаження класу пропишіть у init.php.

Як моніторити помилки автоматично?

Логи самі по собі не допоможуть, якщо їх ніхто не читає. Додайте агент, що запускається кожні 15 хвилин, який рахує кількість ERROR-записів за період. Якщо поріг перевищено, надсилайте сповіщення (поштова подія або Telegram). Це перетворює логування з пасивного інструменту на активну систему моніторингу. На практиці ми бачили, як такий агент допоміг запобігти простою інтернет-магазину: помилка через зміну структури HTML на сайті джерела була помічена через 3 хвилини, а не через 3 години.

Що входить у налаштування логування під ключ

Ми пропонуємо комплексне налаштування логування для вашого проєкту:

  • Клас ParserLogger з рівнями DEBUG/INFO/WARNING/ERROR і автоматичним записом у файл і b_event_log.
  • Файлові логи з ротацією в /local/logs/parser/ (зберігання 30 днів).
  • Можливість перемикання рівня через адмінку без деплою.
  • Агент моніторингу помилок зі сповіщеннями.
  • Документація з використання та інструкція для команди.

Ми працюємо з Бітріксом більше 10 років, реалізували 50+ проєктів з автонаповненням та інтеграцією 1С. Гарантуємо, що після налаштування ви зможете розбирати будь-яку помилку парсера за хвилини. Оцінимо ваш проєкт безкоштовно — зв'яжіться, щоб обговорити деталі. Замовте налаштування логування під ключ і економте години на налагодженні.