前回はメールでのエラー通知を紹介しましたが、今回はslackに通知する方法です。
Laravelもslackへの通知を標準でサポートしており、簡単に対応することができます。
slackに通知する手順は次のようになります。
まずslackにアクセスし、下記画像のように「Incoming Webhook」というアプリを利用できるようにします。
①をクリックし、②で「Incoming WebHooks」と入力すると、該当のアプリが表示されますので、③の追加をクリックします。
その後次の画面が表示されます。
[Slackに追加]を押すと次の画面が表示されます。
ここでエラーを通知したいチャンネルを選択します。すると下記のようなボタンが表示されます。
[Incoming Webhook インテグレーションの追加]を押すと次の画面が表示されます。
この[Webhook URL]がslackに通知するためのURLとなりますので、コピーします。
次にLaravelにslackの設定を行います。.env ファイルにLOG_SLACK_WEBHOOK_URLという項目を追加し、コピーしたURLをセットします。
APP_URL=http://localhost LOG_CHANNEL=stack LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/・・・ DB_CONNECTION=mysql
次に config/logging.php を開き、下記のように記述します。
'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['daily', 'slack'], // slackを追加 ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', 'days' => 14, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => 'Laravel error', // slackに表示される発言者名 'emoji' => ':boom:', // slackに表示される絵文字 'level' => 'debug', // 通知するエラーレベル ], 'papertrail' => [ 'driver' => 'monolog', 'level' => 'debug', 'handler' => SyslogUdpHandler::class, 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), ], ],
これでエラーが発生すると、ログファイルとslackにその内容が書き込まれることになります。
開発環境など、slackに通知する必要が無い場合は、.env ファイルを次のように変更します。
LOG_CHANNEL=single
このように設定すると、この環境ではログファイルにのみ書き込むようになります。
以上となります。
これで本番環境で 知らないうちにエラーが発生していたなんてことも無くなります。