前回はメールでのエラー通知を紹介しましたが、今回は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
このように設定すると、この環境ではログファイルにのみ書き込むようになります。
以上となります。
これで本番環境で 知らないうちにエラーが発生していたなんてことも無くなります。