Включить логирование ошибок php Битрикс с отправкой в Телеграм

Когда PHP-приложение на Битрикс падает с ошибкой, первое, что нужно — узнать об этом как можно быстрее. Файл лога на сервере есть, но кто и когда его смотрит? Гораздо удобнее получать уведомление прямо в Телеграм — мгновенно, с текстом ошибки. В этой статье разберём полный цикл: настройку логирования ошибок PHP в Битрикс через .settings.php, создание Telegram-бота и скрипта-нотификатора, запуск через cron.

Зачем логировать ошибки PHP в Битрикс

Битрикс — сложная система с большим количеством внутренних компонентов, событий и хуков. Ошибки PHP в production-среде могут проявляться неочевидно: пользователь видит пустую страницу или некорректный результат, а вы узнаёте об этом из звонка клиента. Стандартный PHP error_log существует, но его удобство зависит от того, куда он пишет и кто его читает.

Битрикс предоставляет собственный механизм обработки исключений через секцию exception_handling в bitrix/.settings.php — он позволяет гибко настроить, какие ошибки перехватывать и куда их писать.

Настройка .settings.php: только критические ошибки

Добавляем в файл конфигурации bitrix/.settings.php секцию обработки ошибок. Вариант для отлова только критических, блокирующих ошибок:

Расширенная конфигурация с предупреждениями

Если нужно логировать не только фатальные ошибки, но и предупреждения (например, для отладки), используйте расширенный вариант:

В лог попадут строки с меткой UNCAUGHT_EXCEPTION — именно по этой метке скрипт-нотификатор будет находить критические ошибки.

Как создать бота Телеграм и получить токен

Перед написанием PHP-кода нужно подготовить Telegram-бота:

  • Откройте Telegram и найдите @BotFather.
  • Отправьте команду /newbot, задайте имя и username бота.
  • BotFather выдаст токен вида 123456789:AAF... — сохраните его.
  • Напишите боту любое сообщение, затем откройте в браузере: https://api.telegram.org/botВАШ_ТОКЕН/getUpdates
  • В ответе JSON найдите поле chat.id — это ваш Chat ID для отправки сообщений.

PHP-скрипт отправки уведомлений в Телеграм

Создайте файл, например /home/bitrix/cron/error_notifier.php, со следующим содержимым:

Запуск через cron

Добавьте задачу в crontab для периодической проверки лога, например раз в 10 минут:

Убедитесь, что файл лога доступен для чтения пользователю, под которым запускается cron:

Как не заспамить Телеграм при массовых ошибках

Если одна и та же ошибка повторяется сотни раз подряд (например, сбой подключения к БД), скрипт отправит сотни одинаковых сообщений. Чтобы этого избежать:

  • Дедупликация по хешу — сохраняйте хеш последней отправленной ошибки в файл или Redis, и отправляйте повторно только если прошло достаточно времени.
  • Ограничение частоты — добавьте флаг-файл с временем последней отправки:

  • Очистка лога после прочтения — после обработки записей обнуляйте лог, чтобы не перечитывать старые ошибки. Либо сохраняйте номер последней прочитанной строки.

Просмотр логов на сервере

Помимо Telegram-уведомлений полезно уметь просматривать логи вручную. Основные команды:

Итог

Связка «Битрикс .settings.php + PHP-скрипт + cron + Telegram Bot API» даёт простую и надёжную систему мониторинга ошибок без сторонних платных сервисов. Вы узнаёте о критических проблемах в течение 10 минут после их появления, не заходя на сервер. При необходимости схему легко расширить: добавить несколько чатов, фильтровать по типу ошибок, интегрировать с системой тикетов.