Розробка модуля логування для 1С-Бітрікс за PSR-3

Розробка модуля логування 1С-Бітрікс Розбір інциденту на продакшні без нормальних логів — заняття болісне. Стандартний `\Bitrix\Main\Diag\Debug::writeToFile()` пише у плоский файл без структури, без рівнів, без ротації. За тиждень роботи — файл на 2 ГБ, який неможливо ні проаналізувати, ні знайти
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Розробка модуля логування для 1С-Бітрікс за PSR-3
Середній
~1-2 тижні

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1454
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1017
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    759
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    802
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1162

Розробка модуля логування 1С-Бітрікс

Розбір інциденту на продакшні без нормальних логів — заняття болісне. Стандартний \Bitrix\Main\Diag\Debug::writeToFile() пише у плоский файл без структури, без рівнів, без ротації. За тиждень роботи — файл на 2 ГБ, який неможливо ні проаналізувати, ні знайти потрібний запис. Ми пропонуємо модуль логування, який вирішує цю проблему системно. Він записує структуровані записи в БД, використовує рівні severity, теги, контекст, ротацію та пошук через адміністративний інтерфейс. Це скорочує час пошуку помилок з годин до хвилин. Отримайте консультацію щодо впровадження модуля логування у вашому проєкті.

Чому стандартний логер Бітрікса не підходить?

Debug::writeToFile() змішує в одному файлі всі події: налагоджувальні, інформаційні та критичні. Немає ротації — файл зростає до десятків гігабайт. Немає пошуку — доводиться використовувати grep по величезному файлу. Немає рівнів — неможливо відфільтрувати лише помилки. Все це перетворює налагодження на ворожіння. Наш модуль вирішує ці недоліки з коробки: структуровані записи в ORM, рівні PSR-3, розділення за каналами, ротація, пошук.

Як модуль логування прискорює налагодження?

Модуль реалізує PSR-3 — це промисловий стандарт логування. Ви отримуєте єдиний інтерфейс для всіх компонентів системи. Час пошуку конкретної помилки скорочується в 10 разів порівняно з плоским файлом. Алерти в Telegram/Slack при критичних помилках дозволяють реагувати миттєво.

Архітектура

Модуль vendor.logger реалізує інтерфейс PSR-3 (Psr\Log\LoggerInterface), що дозволяє підключати його до будь-яких бібліотек, які підтримують PSR-3: Guzzle, Doctrine, Symfony.

Таблиці ORM:

  • b_vendor_log_entry — записи логу: id, level (debug/info/notice/warning/error/critical/alert/emergency), channel, message, context (JSON), extra (JSON), created_at, user_id, request_uri, ip
  • b_vendor_log_channel — канали: id, code, name, min_level, handlers (JSON), is_active
  • b_vendor_log_archive — архівовані записи (після ротації): аналогічна структура + archived_at

Реалізація PSR-3

class BitrixLogger extends \Psr\Log\AbstractLogger { private string $channel; public function __construct(string $channel = 'app') { $this->channel = $channel; } public function log($level, $message, array $context = []): void { if (!$this->isLevelEnabled($level)) { return; } $extra = [ 'user_id' => $GLOBALS['USER']?->GetID(), 'request_uri' => $_SERVER['REQUEST_URI'] ?? '', 'ip' => $_SERVER['REMOTE_ADDR'] ?? '', ]; LogEntryTable::add([ 'LEVEL' => $level, 'CHANNEL' => $this->channel, 'MESSAGE' => $this->interpolate($message, $context), 'CONTEXT' => $context, 'EXTRA' => $extra, ]); } private function interpolate(string $message, array $context): string { $replace = []; foreach ($context as $key => $val) { $replace['{' . $key . '}'] = is_scalar($val) ? $val : json_encode($val, JSON_UNESCAPED_UNICODE); } return strtr($message, $replace); } } 

Використання в коді

$logger = new \Vendor\Logger\BitrixLogger('payment'); $logger->info('Ініційовано платіж', ['order_id' => 42, 'sum' => 1500.00, 'gateway' => 'sberbank']); $logger->error('Помилка платіжного шлюзу', ['order_id' => 42, 'response' => $gatewayResponse]); // Глобальний логер через фасад \Vendor\Logger\Log::channel('sync')->warning('Синхронізація з 1С: товар не знайдено', ['xml_id' => 'ABC-123']); 

Обробники (Handlers)

Запис у БД — не єдиний обробник. Модуль підтримує кілька хендлерів на один канал:

  • DatabaseHandler — запис у b_vendor_log_entry (основний)
  • FileHandler — запис у файл з автоматичною ротацією (щоденно, максимум N файлів)
  • SlackHandler — відправка critical/emergency у Slack-канал через Webhook
  • TelegramHandler — відправка алертів у Telegram-бот при рівні >= error

Конфігурація каналів зберігається в b_vendor_log_channel у полі handlers (JSON). Приклад:

{ "handlers": [ {"type": "database", "min_level": "debug"}, {"type": "telegram", "min_level": "error", "chat_id": "-100123456789"} ] } 
Обробник Призначення Мінімальний рівень
DatabaseHandler Довгострокове зберігання debug
FileHandler Швидкий доступ до свіжих логів debug
SlackHandler Алерти критичних помилок critical
TelegramHandler Миттєві сповіщення error

Ротація та архівація

Агент ротації запускається раз на добу:

// Записам старше 30 днів — перенесення в b_vendor_log_archive // Записам старше 90 днів в архіві — видалення // Параметри налаштовуються в адміністративному інтерфейсі модуля \Vendor\Logger\RotationAgent::run(); 

Перенесення виконується батчами по 1000 записів, щоб не блокувати таблицю на довгий час.

Перехоплення помилок PHP

Модуль може реєструвати глобальний обробник помилок PHP:

set_error_handler(function($errno, $errstr, $errfile, $errline) { $level = ErrorLevelMapper::toLogLevel($errno); \Vendor\Logger\Log::channel('php')->log($level, $errstr, [ 'file' => $errfile, 'line' => $errline, 'errno' => $errno, ]); return false; // Стандартний обробник Бітрікса теж спрацьовує }); set_exception_handler(function(\Throwable $e) { \Vendor\Logger\Log::channel('php')->critical($e->getMessage(), [ 'exception' => get_class($e), 'file' => $e->getFile(), 'line' => $e->getLine(), 'trace' => $e->getTraceAsString(), ]); }); 

Адміністративний інтерфейс

Пошук за логами — основний інструмент при налагодженні:

  • Фільтрація за рівнем, каналом, датою, IP, користувачем, текстом повідомлення
  • Пошук за контекстом (JSON-поле через PostgreSQL @> або LIKE по serialized)
  • Детальний перегляд запису: повний контекст, стек викликів, заголовки запиту
  • Статистика: топ помилок за період, динаміка за рівнями, розбивка за каналами
  • Управління конфігурацією каналів та обробників

Що входить у розробку модуля?

  • Проєктування структури таблиць ORM під ваші завдання
  • Реалізація PSR-3-сумісного логера
  • Налаштування обробників (БД, файл, Slack, Telegram)
  • Розробка агента ротації та архівації
  • Підключення глобального перехоплення помилок PHP
  • Створення адміністративного інтерфейсу з пошуком та статистикою
  • Інтеграція з існуючим кодом (заміна викликів AddMessage2Log)
  • Документація з експлуатації та інструкція для розробників
  • Тестування на тестовому полігоні перед викаткою на продакшн

Ми гарантуємо роботу модуля на стабільній кодовій базі без сюрпризів. Спираючись на 10-річний досвід розробки на Бітрікс, ми створюємо рішення, які працюють передбачувано. Докладніше про PSR-3.

Типові помилки при впровадженні
  • Забувають налаштувати ротацію — архівні таблиці можуть рости безконтрольно
  • Встановлюють надто високий мінімальний рівень для каналів (наприклад, тільки error) — втрачають налагоджувальну інформацію
  • Не інтегрують алерти в Telegram/Slack — дізнаються про помилки тільки від клієнтів
  • Використовують один канал для всіх подій — втрачають контекст

Строки розробки

Етап Строк
ORM-таблиці, PSR-3 реалізація 1 день
DatabaseHandler, FileHandler 1 день
Slack та Telegram алерти 1 день
Ротація та архівація (агент) 1 день
Перехоплення помилок PHP 1 день
Адміністративний інтерфейс, пошук 2 дні
Тестування 1 день

Разом: від 8 робочих днів. Замовте модуль логування під ключ — і забудьте про ручний парсинг логів. Зв'яжіться з нами для оцінки вашого проєкту.