dmitrijkalugin/message-log

Laravel log handler that sends log messages to various messengers (Telegram, Slack, Discord)

Maintainers

Package info

github.com/DmiriiKalugin/laravel-log-alert

pkg:composer/dmitrijkalugin/message-log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-03-26 06:56 UTC

This package is auto-updated.

Last update: 2026-03-26 07:00:47 UTC


README

Laravel библиотека для автоматической отправки логов в мессенджеры (Telegram, Slack, Discord).

Возможности

  • ✅ Отправка логов в Telegram, Slack, Discord
  • ✅ Настраиваемые уровни логирования для каждого канала
  • ✅ Асинхронная отправка через Laravel Queues
  • ✅ Throttling для предотвращения спама
  • ✅ Красивое форматирование сообщений
  • ✅ Легко расширяемая архитектура

Установка

1. Установка через Composer

composer require dmitrijkalugin/message-log

2. Публикация конфигурации

php artisan vendor:publish --tag=messagelog-config

Это создаст файл config/messagelog.php с настройками.

Настройка

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

Для Telegram:

TELEGRAM_ENABLED=true
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_CHAT_ID=your_chat_id_here

Для Slack:

SLACK_ENABLED=true
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL
SLACK_CHANNEL=#logs
SLACK_USERNAME="Laravel Logger"

Для Discord:

DISCORD_ENABLED=true
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR/WEBHOOK/URL
DISCORD_USERNAME="Laravel Logger"

2. Настройте logging channel в config/logging.php

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['single', 'messagelog'],
        'ignore_exceptions' => false,
    ],

    'messagelog' => [
        'driver' => 'monolog',
        'handler' => \MessageLog\MessageLogHandler::class,
        'level' => env('LOG_LEVEL', 'error'),
    ],
    
    // ... другие каналы
],

3. Настройте уровни логирования

В config/messagelog.php можно настроить, какие уровни логов отправлять в каждый мессенджер:

'channels' => [
    'telegram' => [
        'enabled' => true,
        'levels' => ['emergency', 'alert', 'critical', 'error'],
    ],
],

Доступные уровни: emergency, alert, critical, error, warning, notice, info, debug

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

После настройки библиотека автоматически будет отправлять логи:

// Эти логи автоматически отправятся в настроенные мессенджеры
Log::error('Произошла ошибка', ['user_id' => 123]);
Log::critical('Критическая ошибка системы!');
Log::emergency('Система недоступна!');

// С контекстом
Log::error('Ошибка оплаты', [
    'order_id' => 12345,
    'amount' => 1000,
    'error' => 'Payment gateway timeout'
]);

Дополнительные настройки

Асинхронная отправка

Включите в .env:

MESSAGELOG_ASYNC=true

При этом сообщения будут отправляться через Laravel Queue. Убедитесь, что у вас настроен queue worker:

php artisan queue:work

Throttling (ограничение частоты)

По умолчанию включен throttling, чтобы избежать спама одинаковыми ошибками:

MESSAGELOG_THROTTLE_ENABLED=true
MESSAGELOG_THROTTLE_LIMIT=5          # Максимум 5 одинаковых сообщений
MESSAGELOG_THROTTLE_MINUTES=5        # В течение 5 минут

Получение токенов и webhook URL

Telegram

  1. Найдите @BotFather в Telegram
  2. Отправьте /newbot и следуйте инструкциям
  3. Скопируйте токен бота
  4. Добавьте бота в группу или получите свой chat_id через @userinfobot

Slack

  1. Перейдите в Slack API
  2. Создайте новое приложение
  3. Включите "Incoming Webhooks"
  4. Создайте новый webhook для нужного канала
  5. Скопируйте Webhook URL

Discord

  1. Откройте настройки канала в Discord
  2. Перейдите в "Integrations" → "Webhooks"
  3. Создайте новый webhook
  4. Скопируйте Webhook URL

Расширение функциональности

Добавление нового мессенджера

Создайте новый класс, реализующий HandlerInterface:

namespace MessageLog\Handlers;

class CustomHandler extends AbstractHandler
{
    public function send(string $level, string $message, array $context = []): bool
    {
        // Ваша реализация
    }
}

Затем зарегистрируйте его в MessageLogHandler::initializeHandlers().

Требования

  • PHP >= 8.1
  • Laravel >= 10.0
  • Guzzle HTTP >= 7.0

Лицензия

MIT License

Автор

Dmitrij Kalugin