tg-logger

active

Laravel-пакет для отправки логов в Telegram по топикам

23 stars 1 forks

Содержание:

  1. О проекте
  2. Установка
  3. Конфигурация
  4. Использование
  5. Собственные уровни

О проекте

Пакет для Laravel, позволяющий отправлять логи в Telegram-группу с разбивкой по топикам (темам).

Каждый уровень лога (error, warning, info и т.д.) можно направить в отдельный топик — это удобно для мониторинга: критические ошибки не теряются среди информационных сообщений.

Packagist — https://packagist.org/packages/prog-time/tg-logger

Установка

composer require prog-time/tg-logger

После установки опубликуйте конфигурацию:

php artisan vendor:publish --tag=tg-logger-config

Конфигурация

В файле config/tg-logger.php задайте токен бота и настройте каналы:

return [
    'bot_token' => env('TELEGRAM_BOT_TOKEN'),

    'channels' => [
        'errors' => [
            'chat_id'  => env('TELEGRAM_CHAT_ID'),
            'topic_id' => env('TELEGRAM_TOPIC_ERRORS'),
        ],
        'warnings' => [
            'chat_id'  => env('TELEGRAM_CHAT_ID'),
            'topic_id' => env('TELEGRAM_TOPIC_WARNINGS'),
        ],
    ],
];

Добавьте переменные в .env:

TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=-100xxxxxxxxxx
TELEGRAM_TOPIC_ERRORS=10
TELEGRAM_TOPIC_WARNINGS=20

Затем подключите драйвер в config/logging.php:

'channels' => [
    'telegram_errors' => [
        'driver'  => 'custom',
        'via'     => \ProgTime\TgLogger\TelegramLogger::class,
        'channel' => 'errors',
        'level'   => 'error',
    ],
],

Использование

Используйте стандартный Laravel-фасад Log:

use Illuminate\Support\Facades\Log;

Log::channel('telegram_errors')->error('Что-то пошло не так', [
    'user_id' => $user->id,
    'url'     => request()->fullUrl(),
]);

Или настройте стек, чтобы ошибки автоматически дублировались в Telegram:

// config/logging.php
'stack' => [
    'driver'   => 'stack',
    'channels' => ['daily', 'telegram_errors'],
],

Собственные уровни

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

use ProgTime\TgLogger\Formatters\BaseFormatter;

class MyFormatter extends BaseFormatter
{
    public function format(array $record): string
    {
        $emoji = match ($record['level_name']) {
            'ERROR'   => '🔴',
            'WARNING' => '🟡',
            default   => '🔵',
        };

        return "{$emoji} <b>{$record['level_name']}</b>\n{$record['message']}";
    }
}

Укажите форматтер в конфиге канала:

'formatter' => MyFormatter::class,