Логирование для разработчиков 1С-Битрикс
Два года назад писали про внутренней инструмент для логирования. С помощью модуля Intensa Logger мы выполняем отладку на проектах на 1С-Битрикс.
Ниже расскажем про релиз-версию, в которой:
- повысили уровень качества, стабильности и безопасности кода,
- упростили установку,
- улучшили производительность и отказоустойчивость,
- добавили в проект тесты,
- добавили трекер SQL-запросов,
- добавили новые возможности для кастомизации в рамках проекта.
Результат выложили в 1С-Битрикс: Маркетплейс, пользуйтесь.
Сегодня поделимся обновленной документацией, расскажем о фичах в новой версии и на примерах разберем, как использовать Intensa Logger в проектах.
Учимся логировать с модулем
Intensa Logger — простой функциональный модуль CMS Bitrix, который логирует данные проекта в файлы. Подойдет для отслеживания «узких" мест в проекте и дебага при разработке.
В модуле реализованы:
- оповещения о критических проблемах в проекте,
- очищение устаревших лог-файлов,
- таймеры выполнения,
- SQL-трекер на основе diag.
Как добавить модуль в проект
Самый простой способ — установить его через маркетплейс.
Но можно и вручную. Для этого:
- Клонируем репозиторий в директорию с модулями /bitrix/modules/ или /local/modules/.
- Переходим в директорию intensa.logger/lib (команда cd intensa.logger/lib).
- Устанавливаем зависимости composer install --no-dev.
- Добавляем модуль через админскую часть сайта /bitrix/admin/partner_modules.php.
При установке модуль создает:
- защищённую директорию /logs/ в корне проекта для хранения лог-файлов,
- почтовое события для оповещений фатальных уровней логирования,
- агента для удаления устаревших лог-файлов.
Как работать с хранилищем логов
По умолчанию лог-файлы хранятся в директории /logs/ в корне проекта. Изменить место хранения можно в настройках модуля. Защита логов от просмотра в браузере реализована через .htaccess.
В проектах, которые используют nginx в качестве веб-сервера, нужно самостоятельно обезопасить хранилище. Для этого закрываем директорию от просмотра в браузере в конфигах nginx или меняем пути хранилища логов — выносим хранилище из document_root.
Чтобы файлы логов было легко найти, модуль содержит функционал хранения по дням.
Например, все логи за 19 августа 2021 года можно найти в директории /logs/19.08.2021/. Название лог-файла совпадает с кодом логгера, который передается в конструктор класса ILog.
Уровни логирования
Уровень лога — это классификация проблемы. В модуле они подразделяются так:
- DEBUG,
- INFO,
- NOTICE,
- WARNING,
- ERROR,
- CRITICAL,
- ALERT,
- EMERGENCY.
Для каждого уровня лога действует одноименный метод, но с особенностями.
- log () — является алиасом для info ().
- fatal () — является алиасом для alert ().
Это наследие, с которым приходится жить 🙂
Уровни CRITICAL, ALERT, EMERGENCY, помимо записи данных в лог-файл, отправляют сообщение администратору сайта. Адрес электронной почты можно указать в настройках модуля.
Какой уровень лога использовать в том или ином месте проекта, решает сам разработчик. Ниже приводим примеры использования логгера.
Из чего состоят логи
Разбираем пример по частям.

Как использовать возможности модуля — на примерах
1. Пример инициализации логгера и демонстрация базовых методов.
Содержимое лог-файла:
2. Пример вызова таймера.
Содержимое лог файла:
Формат логов таймера:
- CODE — код таймера, определяется разработчиком при вызове таймера.
- START_TIME — время запуска.
- STOP_TIME — время остановки.
-
EXEC_POINT — время исполнения,
т. е. разница между временем остановки и временем запуска. - START_POINT — место определения точки запуска, вызов метода startTimer ().
- STOP_POINT — место определения точки остановки, вызов метода через команду stopTimer ().
- Значение «__destruct» означает, что для текущего счетчика не вызвали метод stopTimer () и остановка произошла в деструкторе класса.
3. Использование трекера SQL-запросов.
Содержимое лог-файла:
Методы логгера
Доступные методы класса ILog помогут кастомизировать поведение каждого отдельного объекта логгера.
Что нового в модуле
Конфигурация модуля
Полностью отказались от хранения настроек в файле конфигурации и перенесли все настройки в админ-панель Битрикс.

Внедрили ряд новых настроек и информирований. Теперь можно:
- менять права доступа к файлам и директориям логов,
- записывать логи в формате json,
- управлять ротацией логов,
- получать информацию о безопасности логов (логи недоступны в браузере),
- получать информацию о существовании корневой директории и делать в ней записи.
Отказоустойчивость и улучшение производительности
В альфа-версии модуля PHP не хватало памяти. Это отразилось на проектах с малыми серверными ресурсами: когда нужно было записать большое количество данных в файл, скрипт падал с фатальной ошибкой.
Чтобы выяснить причину, мы подключили профилирование. По результатам стало ясно, какие именно узлы модуля нужно рефакторить.

Переписали функционал записи логов в файл и протестировали его на серверах с 1 Гб оперативной памяти. Тестовые скрипты для записи большого количества данных больше не падали. Производительность увеличилась примерно на 50%, если сравнивать с альфа-версией.
Удаление устаревших логов
Еще одна проблема, с которой столкнулись, — это громадный объем устаревших данных логирования. Ценности они не несли, а место на сервере занимали. Поэтому мы реализовали на агенте функционал, который очищает устаревшие файлы и директории. В настройках модуля можно указать, как часто нужно удалять устаревшие логи.
Ссылки на модуль
- Маркетплейс 1С-Битрикс http://marketplace.1c-bitrix.ru/solutions/intensa.logger/
- Репозиторий https://github.com/intensa/intensa.logger