О проекте
Пакет для 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,