- Notifications
You must be signed in to change notification settings - Fork4
Monolog logger for 1C-Bitrix with Telegram
License
itrukhin/bxmonolog
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
АдаптерMonolog для 1С-Битрикс
Адаптер позволяет организовать запись и хранение файлов логов в Битриксе. Основные возможности:
- Хранение всех логов в выделенной специальной папке на сервере
- Автоматическое создание вложенных папок для группировки файлов логов
- Ошибки ядра 1С-Битрикс пишутся во вложенную папку bitrix, которую можно переназначить
- Каждый день логи пишутся в отдельный файл вида YYYY-MM-DD.log
- Автоматическое удаление файлов логов старше N дней
- Конфигурирование через глобальные переменные $_ENV, например с помощьюDotenv
- Аварийный лог inner_error.log для ошибок самого логгера
composer require itrukhin/bxmonolog:dev-master
Предполагается, что у вас Битрикс уже умеет работать с автозагрузкой composer
'exception_handling' =>array ('value' =>array ('debug' => ((bool)$_ENV['APP_DEBUG']),'handled_errors_types' =>E_ALL & ~E_WARNING & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED,'exception_errors_types' =>E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED,'ignore_silence' =>false,'assertion_throws_exception' =>true,'assertion_error_type' =>256,'log' =>array ('class_name' =>'\App\Monolog\ExceptionHandlerLog', ), ),'readonly' =>false, ),
- APP_DEBUG - включить/выключить отладку, используется только в
.settings.php - APP_DEBUG_LEVEL - минимальный уровень, для которого будет выполняться запись в лог. По умолчанию
DEBUG, это значит, что будут выводиться все ошибки. Можно на проде, например, ограничить уровнемERROR - APP_LOG_FOLDER - папка логов, относительно
DOCUMENT_ROOT. По умолчанию/log/ - APP_LOG_BITRIX_CHANNEL - подпапка логов по умолчанию. Если не задано, будет создана папка
bitrix, относительноAPP_LOG_FOLDER. Для записи своих логов рекомендуется явно указывать папку, так как в папкуbitrixбудут записываться ошибки ядра.
Код примеров есть в папкеexamples
При настроенном.settings.php (см. выше) все ошибки битрикса будут записываться в файл
DOCUMENT_ROOT/APP_LOG_FOLDER/APP_LOG_BITRIX_CHANNEL/YYYY-MM-DD.log
что, по умолчанию, соответствует пути/log/bitrix/ от корня сервера. Ошибки ядра имеют уровеньCRITICAL
Для записи произвольных логов необходимо вначале создать экземпляр объекта лога
$log =new \App\Log('test');
где test - имя папки, относительноAPP_LOG_FOLDER, в которую будут писаться логи. Подапка, при ее отсутствии, будет создана автоматически. По возможности, будут установлены аттрибутыBX_DIR_PERMISSIONS
Далее для каждого уровня лога может быть вызван одноименный метод, например:
$log->info('log info message');$log->debug($_SERVER);$log->alert([1,2]);$log->notice(\Bitrix\Main\Application::getConnection());
В результате мы получаем файлы логов с отформатированным содержимым, пример:
CRITICAL 12.11.2020 11:02:01Bitrix\Main\DB\SqlQueryException: Mysql query error: [] in /var/www/html/bitrix/modules/main/classes/mysql/database.php:183Stack trace:#0 /var/www/html/bitrix/modules/statistic/classes/mysql/stoplist.php(223): CDatabaseMysql->Query()#1 /var/www/html/bitrix/modules/main/classes/general/module.php(480): CStoplist::Check()#2 /var/www/html/bitrix/modules/main/include.php(303): ExecuteModuleEventEx()#3 /var/www/html/bitrix/modules/main/include/prolog_before.php(14): require_once('/var/www/html/b...')#4 /var/www/html/local/scripts/1c_parser.php(14): require('/var/www/html/b...')#5 {main}------------------------------------------------------------------------CRITICAL 12.11.2020 11:02:01Bitrix\Main\DB\SqlQueryException: Mysql query error: [] in /var/www/html/bitrix/modules/main/classes/mysql/database.php:183Stack trace:#0 /var/www/html/bitrix/modules/statistic/classes/mysql/stoplist.php(223): CDatabaseMysql->Query()#1 /var/www/html/bitrix/modules/main/classes/general/module.php(480): CStoplist::Check()#2 /var/www/html/bitrix/modules/main/include.php(303): ExecuteModuleEventEx()#3 /var/www/html/bitrix/modules/main/include/prolog_before.php(14): require_once('/var/www/html/b...')#4 /var/www/html/local/scripts/yml_cli.php(17): require('/var/www/html/b...')#5 {main}------------------------------------------------------------------------Для оперативной реакции на ошибки, необходимо узнавать о них сразу, как только они возникли. Одним из удобных способовявляется отправка ошибок в чат Telegram. О возникновении ошибки на сайте немедленно будут проинформированы все участники чата.
Необходимо создать бота в телеграм с помощью@BotFather. Для бота мы получимAPI Token вида000000000:XXXXXXXXXXXXXXXXXXXX. Далее нужно создать чат, в который бот будет писать сообщения, и добавить бота администратором в этот чат.Второй параметр, который нам необходимо получить - это ChatID. Получить его можно выполнив запрос видаhttps://api.telegram.org/botXXX:YYYYY/getUpdates,гдеXXX:YYYYY - это API Token бота. В ответ будет json, из которого нужно получить ChatID.
Пример ответа
{"ok":true,"result":[{"update_id":81329501,"message":{"message_id":975,"from":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"chat":{"id":-1001202656383,"title":"R\u00e1dioRN - A voz da na\u00e7\u00e3o!","type":"supergroup"},"date":1587454914,"left_chat_participant":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"left_chat_member":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"}}},{"update_id":81329502,"message":{"message_id":976,"from":{"id":962548471,"is_bot":false,"first_name":"Trajano","last_name":"Roberto","username":"TrajanoRoberto","language_code":"en"},"chat":{"id":-1001202656383,"title":"R\u00e1dioRN - A voz da na\u00e7\u00e3o!","type":"supergroup"},"date":1587454932,"new_chat_participant":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"new_chat_member":{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"},"new_chat_members":[{"id":1215098445,"is_bot":true,"first_name":"MediaFlamengoRawBot","username":"MediaFlamengoRawBot"}]}}]}нас интересует"chat":{"id":-1001202656383,"title"... ChatID это-1001202656383
За настройку параметров отправки сообщений в Telegram отвечают следующие параметры $_ENV
- APP_LOG_TELEGRAM - включить/выключить отправку в Telegram. Должно быть установлено в1, илиtrue, илиon
- APP_LOG_TELEGRAM_KEY - API Token бота
- APP_LOG_TELEGRAM_CHATID - ChatID
Для отправки сообщение в телеграм, реализован метод telegram, аналогичный методу log в PSR-3
$log =new \App\Log('test');try {// my code}catch(Exception$e) {$log->telegram(\Psr\Log\LogLevel::ERROR,$e, ['source' =>'my code error'])}
Результатом будет запись ошибки в лог и сообщение в Telegram, начинающееся сmy code error и содержащее текст ошибки, имя файла. Также можно писать любой текст.По умолчанию включен формат отправки HTML, включены уведомления, отключена ссылка на просмотр сообщения в вебе. Указывать source не обязательно.
- source - начало сообщения в Telegram
- parse_mode - по умолчанию HTML, но может быть null, Markdown, MarkdownV2
- disable_notification - boolean, по умолчанию false
- disable_preview - boolean, по умолчанию true
Также можно получить экземпляр логгера, с настройками по умолчанию, только для отправки сообщений в Telegram
$log =new \App\Log('telegram-messenger');
Для периодической очистки логов можно использовать метод
\App\Log::cleanLogs(15);
Который будет удалять файлы логов старше 15 дней. Метод возвращает строку вызова самого себя, поэтому может быть добавлен в агенты Битрикса.
About
Monolog logger for 1C-Bitrix with Telegram
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.

