mepsd / laravel-google-chat-logger
Send Laravel application logs to Google Chat with rich formatting, emoji support, and context data
v1.0.4
2025-02-16 17:45 UTC
Requires
- php: ^8.1
- guzzlehttp/guzzle: ^7.5
- illuminate/support: ^10.0|^11.0
- monolog/monolog: ^3.0
Requires (Dev)
- mockery/mockery: ^1.5
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-06-16 18:40:01 UTC
README
Send your Laravel application logs directly to Google Chat with rich formatting, emoji support, threading, and automatic retries.
Features ๐
- ๐ฏ Easy Integration: Works with Laravel's built-in logging system
- ๐งต Message Threading: Group related logs into threads
- ๐จ Rich Formatting: Messages are beautifully formatted in Google Chat
- ๐ Automatic Retries: Built-in retry mechanism for failed messages
- ๐ฏ Level-based Emojis: Different emojis for different log levels
- ๐ Environment Aware: Includes environment information in logs
- โก Performance: Configurable timeouts and retry settings
- ๐จ Exception Handling: Detailed exception formatting with stack traces
Requirements ๐
- PHP 8.1 or higher
- Laravel 10.x or 11.x
- Google Chat space with webhook access
Installation ๐ฟ
- Install the package via composer:
composer require mepsd/laravel-google-chat-logger
- Add these variables to your
.env
file:
LOG_CHANNEL=google_chat GOOGLE_CHAT_WEBHOOK_URL=your-webhook-url
- Add this to your
config/logging.php
channels array:
'channels' => [ 'google_chat' => [ 'driver' => 'custom', 'via' => Mepsd\LaravelGoogleChatLogger\GoogleChatLogger::class, 'url' => env('GOOGLE_CHAT_WEBHOOK_URL'), 'level' => env('LOG_LEVEL', 'debug'), 'retries' => 2, // Number of retry attempts 'timeout' => 5, // Request timeout in seconds ], ],
Usage ๐
Basic Logging
// Simple info message Log::info('User registered successfully', ['user_id' => 1]); // Error with exception try { // Some code } catch (Exception $e) { Log::error('Process failed', [ 'exception' => $e, 'user_id' => 1 ]); }
Message Threading
Group related logs into threads:
// Order Processing Thread $threadKey = 'order-' . $orderId; Log::info('Order received', [ 'thread_key' => $threadKey, 'order_id' => $orderId, 'amount' => 99.99 ]); Log::info('Processing payment', [ 'thread_key' => $threadKey, 'payment_method' => 'credit_card' ]); Log::info('Order completed', [ 'thread_key' => $threadKey, 'status' => 'completed' ]); // User Activity Thread $userThread = 'user-' . $userId; Log::info('User logged in', [ 'thread_key' => $userThread, 'ip' => $request->ip() ]); Log::warning('Failed login attempt', [ 'thread_key' => $userThread, 'attempts' => 3 ]);
Exception Handling
Exceptions are automatically formatted with details:
try { // Your code } catch (Exception $e) { Log::error('Process failed', [ 'thread_key' => 'process-123', 'exception' => $e, 'additional_data' => $data ]); }
Log Levels and Emojis
Each log level has its own emoji:
- ๐จ EMERGENCY - System is unusable
- โ ๏ธ ALERT - Action must be taken immediately
- ๐ฅ CRITICAL - Critical conditions
- โ ERROR - Error conditions
- โ ๏ธ WARNING - Warning conditions
- ๐ NOTICE - Normal but significant conditions
- โน๏ธ INFO - Informational messages
- ๐ DEBUG - Debug-level messages
Message Format
Messages in Google Chat will look like:
[local] โน๏ธ *INFO*
Your message here
Context: { "user_id": 123, "action": "login" }
## Configuration Options
Full configuration options:
```php
'google_chat' => [
'driver' => 'custom',
'via' => Mepsd\LaravelGoogleChatLogger\GoogleChatLogger::class,
'url' => env('GOOGLE_CHAT_WEBHOOK_URL'),
'level' => env('LOG_LEVEL', 'debug'),
'retries' => 2, // Number of retry attempts
'timeout' => 5, // Request timeout in seconds
],
Setting Up Google Chat Webhook ๐
- Open your Google Chat space
- Click the space name to open the dropdown menu
- Select "Manage webhooks"
- Click "Add webhook"
- Name your webhook (e.g., "Laravel Logs")
- Copy the webhook URL
- Add the URL to your
.env
file
Best Practices ๐ฏ
- Use meaningful thread keys:
'user-{id}' // For user activities 'order-{id}' // For order processing 'deploy-{date}' // For deployments 'job-{id}' // For background jobs
- Group related logs:
$threadKey = 'payment-' . $paymentId; Log::info('Starting payment', ['thread_key' => $threadKey]); Log::info('Processing', ['thread_key' => $threadKey]); Log::info('Completed', ['thread_key' => $threadKey]);
- Include context data:
Log::info('User action', [ 'thread_key' => 'user-123', 'action' => 'profile_update', 'changes' => ['name' => 'New Name'], 'ip' => $request->ip() ]);
Testing ๐งช
composer test
Security ๐
If you discover any security-related issues, please use the issue tracker.
Credits ๐
License ๐
The MIT License (MIT). Please see License File for more information.