https://github.com/mbpcoder/laravel-monolog-telegram
Send Laravel exception to Telegram base one Monolog
https://github.com/mbpcoder/laravel-monolog-telegram
laravel monolog telegram telegram-bot
Last synced: 5 months ago
JSON representation
Send Laravel exception to Telegram base one Monolog
- Host: GitHub
- URL: https://github.com/mbpcoder/laravel-monolog-telegram
- Owner: mbpcoder
- Created: 2020-11-14T14:26:15.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2025-11-03T19:48:05.000Z (8 months ago)
- Last Synced: 2025-11-03T21:21:06.847Z (8 months ago)
- Topics: laravel, monolog, telegram, telegram-bot
- Language: PHP
- Homepage:
- Size: 75.2 KB
- Stars: 28
- Watchers: 1
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Real-Time Laravel exception logs in your Telegram π
## ScreenShot

## β Why Another Logger?
Logging should be more than just saving data β it should **drive action**. Hereβs why π **Telegram Handler for Monolog** π is a game-changer:
- π **Real-Time Feedback** β Instantly receive logs in your Telegram chat.
- π§ **Actionable Insights** β Include useful context for quick understanding.
- π‘οΈ **No Need for Sentry or Third-Party Services**
- β‘ **Immediate Alerts** β Be notified of issues the moment they happen.
- π₯ **Team Collaboration** β Share logs in group chats for quick follow-up.
- π§© **Easy Customization** β Use PHP attributes to control log routing.
## π― Installation
Install via Composer:
```sh
composer require thecoder/laravel-monolog-telegram
```
## βοΈ Usage
Update your `config/logging.php` file to configure the Telegram logging channel.
### β³ Running Logs in a Queue
If a queue name is set, logs will be processed asynchronously in the specified queue. Otherwise, they will run synchronously.
### π§ Configuration Example
Modify your `config/logging.php` file:
```php
use TheCoder\MonologTelegram\Attributes\EmergencyAttribute;
use TheCoder\MonologTelegram\Attributes\CriticalAttribute;
use TheCoder\MonologTelegram\Attributes\ImportantAttribute;
use TheCoder\MonologTelegram\Attributes\DebugAttribute;
use TheCoder\MonologTelegram\Attributes\InformationAttribute;
use TheCoder\MonologTelegram\Attributes\LowPriorityAttribute;
return [
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'telegram'],
],
'telegram' => [
'driver' => 'monolog',
'level' => 'debug',
'handler' => TheCoder\MonologTelegram\TelegramBotHandler::class,
'handler_with' => [
'token' => env('LOG_TELEGRAM_BOT_TOKEN'),
'chat_id' => env('LOG_TELEGRAM_CHAT_ID'),
'topic_id' => env('LOG_TELEGRAM_TOPIC_ID', null),
'bot_api' => env('LOG_TELEGRAM_BOT_API', 'https://api.telegram.org/bot'),
'proxy' => env('LOG_TELEGRAM_BOT_PROXY', null),
'queue' => env('LOG_TELEGRAM_QUEUE', null),
'timeout' => env('LOG_TELEGRAM_TIMEOUT', 5),
'topics_level' => [
EmergencyAttribute::class => env('LOG_TELEGRAM_EMERGENCY_ATTRIBUTE_TOPIC_ID', null),
CriticalAttribute::class => env('LOG_TELEGRAM_CRITICAL_ATTRIBUTE_TOPIC_ID', null),
ImportantAttribute::class => env('LOG_TELEGRAM_IMPORTANT_ATTRIBUTE_TOPIC_ID', null),
DebugAttribute::class => env('LOG_TELEGRAM_DEBUG_ATTRIBUTE_TOPIC_ID', null),
InformationAttribute::class => env('LOG_TELEGRAM_INFORMATION_ATTRIBUTE_TOPIC_ID', null),
LowPriorityAttribute::class => env('LOG_TELEGRAM_LOWPRIORITY_ATTRIBUTE_TOPIC_ID', null),
]
],
'formatter' => TheCoder\MonologTelegram\TelegramFormatter::class,
'formatter_with' => [
'tags' => env('LOG_TELEGRAM_TAGS', null),
],
],
],
];
```
### π·οΈ Topic-Based Logging
You can assign a **PHP Attribute (Annotation)** to controller methods, command handlers, or job handlers, enabling topic-based logging. The package will use the first detected attribute to determine the topic for logging messages.
#### π‘ Example:
**π Controller Method:**
```php
namespace App\Http\Controllers\NewWeb;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use TheCoder\MonologTelegram\Attributes\EmergencyAttribute;
class HomeController extends Controller
{
#[EmergencyAttribute]
public function index(Request $request)
{
// Your logic here
}
}
```
**β‘ Command or Job Handler:**
```php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeQueued;
use Illuminate\Foundation\Bus\Dispatchable;
use TheCoder\MonologTelegram\Attributes\CriticalAttribute;
class ProcessData implements ShouldBeQueued
{
use Dispatchable, Queueable;
#[CriticalAttribute]
public function handle()
{
// Job processing logic
}
}
```
**βοΈ Livewire Component Route:**
```html
```
```php
class CreatePost extends Component
{
#[CriticalAttribute]
public function save()
{
}
public function render()
{
return view('livewire.create-post');
}
}
```
### π Customizing Log Settings at Runtime
You can dynamically set the bot token, chat ID, and topic ID while logging:
```php
logger('message', [
'token' => 'your_bot_token',
'chat_id' => 'your_chat_id',
'topic_id' => 'your_topic_id'
]);
```
## π Environment Variables
Ensure the following variables are set in your `.env` file:
```ini
LOG_TELEGRAM_BOT_TOKEN=
LOG_TELEGRAM_CHAT_ID=
# π·οΈ If using chat groups with topic support, define the topic ID
LOG_TELEGRAM_TOPIC_ID=
# π Optional: Change the API endpoint (default is Telegram's official API)
LOG_TELEGRAM_BOT_API='https://api.telegram.org/bot'
# π‘οΈ Optional: Use a proxy (e.g., Tor for restricted regions)
LOG_TELEGRAM_BOT_PROXY='socks5h://localhost:9050'
# π₯ Topic Level Configurations
LOG_TELEGRAM_EMERGENCY_ATTRIBUTE_TOPIC_ID=
LOG_TELEGRAM_CRITICAL_ATTRIBUTE_TOPIC_ID=
LOG_TELEGRAM_IMPORTANT_ATTRIBUTE_TOPIC_ID=
LOG_TELEGRAM_DEBUG_ATTRIBUTE_TOPIC_ID=
LOG_TELEGRAM_INFORMATION_ATTRIBUTE_TOPIC_ID=
LOG_TELEGRAM_LOWPRIORITY_ATTRIBUTE_TOPIC_ID=
```
## π License
This package is open-source and available under the MIT License. π