Отправка логов в Telegram. Модуль для Laravel

b2640a028461b488a178ca39b057989c.png

Всем привет! В данной записи я хотел бы поделиться с вами модулем который я разработал для Laravel.

https://github.com/prog-time/tg-logger

Это мой первый опыт в разработке публичных модулей для Laravel, поэтому прошу не судить строго!

Данный модуль позволяет легко и быстро настроить отправку логов и сообщений об ошибках в Telegram сообщество, где под каждый тип события вы можете выбрать отдельный топик. Таким образом вы можете отправлять сообщения о кастомных событиях, исключения и системные ошибки.

Конечно, есть более продвинутые решения для логирования, но они требуют более глубокую настройку. Я же хотел создать модуль, который будет быстро настраиваться и хорошо подойдёт для мелких и средних проектов.

Настройка модуля

Для начала вам нужно создать Telegram бота который будет отвечать за отправку оповещений. После этого создаём группу, включаем в ней «Темы» и добавляем созданного бота в группу (обязательно с правами администратора).

Скрытый текст

О создание бота вы можете почитать тут — https://prog-time.ru/course/bot-v-telegram-2/

Для получения ID сообщества вам необходимо добавить бота @myidbotв группу и отправить команду /getgroupid в чат.

После создания бота, записываем токен бота и id группы в .env файл.

TG_LOGGER_TOKEN="token_bot"
TG_LOGGER_CHAT_ID="id_group"

Устанавливаем модуль через Composer.

composer require prog-time/tg-logger

После установки модуля, вам необходимо создать конфигурационный файл config/tg-logger.php и прописать в нём параметры для работы модуля.

Вы можете создать файл вручную или перенести заготовленную версию конфигурации, которая находится внутри модуля, прописал следующую команду.

php artisan vendor:publish --tag=config

Теперь давайте заполним созданный конфигурационный файл.

  env('TG_LOGGER_TOKEN'),
    'chat_id' => env('TG_LOGGER_CHAT_ID'),
    'topics' => [
        [
            'name' => 'Debug messages',
            'icon_color' => '9367192',
            'level' => 'debug',
        ],
        [
            'name' => 'Cron tasks',
            'icon_color' => '9367192',
            'level' => 'crone',
        ],
        [
            'name' => 'Errors',
            'icon_color' => '9367192',
            'level' => 'error, notice, warning, emergency',
        ]
    ]
];

Конфигурация tg-logger.php включает в себя следующие параметры:

  • token — токен Telegram бота

  • chat_id — id группы куда мы будет отправлять логи

  • topics — здесь указываем названия тем, типы логов которые будет принимать тема и цвета иконок тем.

После настройки tg-logger.php, вам необходимо запустить команду которая создаст темы в группе.

php artisan tglogger:create-topics

*После запуска данной команды, файл tg-logger.php будет перезаписан и в нём будут указаны id тем

На этом настройка модуля закончена, ниже рассмотрим как работать с модулем TgLogger.

Работа с модулем TgLogger

Отлов системных ошибок

Для отлова всех типов ошибок вам необходимо изменить базовый обработчик логов в конфигурационном файле config/logging.php, указав в качестве обработчиков классы модуля.

'channels' => [
    ...
    'telegram' => [
        'driver' => 'monolog',
        'handler' => ProgTime\TgLogger\TgHandler::class,
        'formatter' => ProgTime\TgLogger\TgFormatter::class,
        'level' => 'debug',
    ],
    ...
],

И в .env изменить параметр LOG_CHANNEL

LOG_CHANNEL=telegram

Отправка сообщений через класс TgLogger

Вы также можете отправлять оповещения, напрямую, используя класс TgLogger и статический метод sendLog ().

TgLogger::sendLog('Your message', 'level');

Большое спасибо тем кто дочитать данную статью до конца! Буду очень рад если вы поддержите данное решение на GitHub и напишете свой комментарий под данным постом.

© Habrahabr.ru