Skip to the content.

♥ Made with <love/> And I love <code/>

Laravel Google Chat Log

Brings up the option for sending the logs to google chat [Google Workspace formerly called GSuite] from Laravel/Lumen.

Installation

Composer install

composer require theriddleofenigma/laravel-google-chat-log

For laravel 9.x or lower, please use v1.x

composer require theriddleofenigma/laravel-google-chat-log:^1.3

Add the following code to the channels array in config/logging.php in your laravel/lumen application.

'google-chat' => [
    'driver' => 'monolog',
    'url' => env('LOG_GOOGLE_CHAT_WEBHOOK_URL'),
    'notify_users' => [
        'default' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_DEFAULT'),
        'emergency' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_EMERGENCY'),
        'alert' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_ALERT'),
        'critical' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_CRITICAL'),
        'error' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_ERROR'),
        'warning' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_WARNING'),
        'notice' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_NOTICE'),
        'info' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_INFO'),
        'debug' => env('LOG_GOOGLE_CHAT_NOTIFY_USER_ID_DEBUG'),
    ],
    'level' => env('LOG_LEVEL', 'debug'),
    'handler' => \Enigma\GoogleChatHandler::class,
],

You can provide the eight logging levels defined in the RFC 5424 specification: emergency, alert, critical, error, warning, notice, info, and debug

Note*: Make sure to set the LOG_GOOGLE_CHAT_WEBHOOK_URL env variable. And all other LOG_GOOGLE_CHAT_NOTIFY_USER_ID are optional. Here, you can set multiple google chat webhook url as comma separated value for the LOG_GOOGLE_CHAT_WEBHOOK_URL env variable.

Note*: For lumen, make sure the $app->withFacades(); is uncommented in the bootstrap/app.php.

Now, you can notify a specific user with @mention in the error log by setting the corresponding USER_ID to the LOG_GOOGLE_CHAT_NOTIFY_USER_ID_DEFAULT env variable. User Ids mapped under LOG_GOOGLE_CHAT_NOTIFY_USER_ID_DEFAULT will be notified for all log levels.

For getting the USER_ID, right-click the user-icon of the person whom you want to notify in the Google chat from your browser window and select inspect. Under the div element find the attribute data_member_id, then the USER_ID can be found as data-member-id="user/human/{USER_ID}>".

In order to notify all the users like @all, Set LOG_GOOGLE_CHAT_NOTIFY_USER_ID_DEFAULT=all. Also, you can set multiple USER_IDs as comma separated value. In order to notify different users for different log levels, you can set the corresponding env keys mentioned to configure in the logging.php file.

Now, you can add custom additional logs to the Google chat message by passing a closure function to the GoogleChatHandler::$additionalLogs property.

use Enigma\GoogleChatHandler;
use Illuminate\Http\Request;

class AppServiceProvider {
    public function register() {}
    public function boot() {
        GoogleChatHandler::$additionalLogs = function () {
            return [
                'tenant' => request()->user()?->tenant->name,
                'request' => json_encode(request()->toArray()),
            ];
        };
    }
}

License

Copyright © Kumaravel

Laravel Google Chat Log is open-sourced software licensed under the MIT license.