LoginSignup
13
10

More than 3 years have passed since last update.

LaravelでエラーログをSlackに投稿したい

Posted at

エラーログをSlackに投稿したい

G'sAcademyで出会った同期とチームで開発していたWebアプリケーション「HomeYou」
最近リリースしました!

それに伴ってエラー発生時にSlackに通知を送りたいと思い、試してみたところ
とても簡単にできたので、その方法を今回は書き留めていこうと思います。

リリースした「HomeYou」について...

と、その前に簡単にリリースしたアプリについても軽ーく説明させてもらいます。

今回リリースしたのは、
Twitterアカウントに匿名でレビュー(メッセージ)を残すことができる
HomeYou(ホームユー)」
というWebアプリケーションです。

SNSは、私たちの生活にとって切っても切れない関係になってきましたが、
リアルな交友関係とも繋がっていて踏みこんだことを発信するのは照れくさかったり、
自分のフィードに投稿が残ってしまい、時間が経つとどこか恥ずかしかったり、
また一方で、最近は誹謗・中傷が問題になっていたりと、
いろんな問題を抱えているな〜という課題感から
自由に自分の想いを投稿できて、かつ優しい世界を実現したいという想いから作ったサービスです。

HomeYouは、Twitterアカウントに対するレビュー(メッセージ)の匿名投稿、
そして、独自のNGワードでのフィルタリングなどがメインの機能となります。
また、心温まるレビューは、サービスを運営する私たちが投稿者の代わりにその相手へお伝えしていきます。

好きなアーティストへの熱い気持ちや
直接伝えるのは恥ずかしい身近な誰かに対するちょっとした感謝の気持ちなどを
気軽に投稿して遊んでみてください〜^^
(※投稿にはTwitterアカウントでのログインが必要です!)

では、次のセクションからエラーログをSlackに投稿する手順のお話をしていきます!

Slack通知の設定手順

①Incoming webhook URLを取得
②config/logging.phpと.env設定

こんな感じでとてもシンプルです!
Laravel5.6から標準でSlackへの通知ができるようになっており、
簡単に設定ができますので、個人でアプリを開発している方などは非常に便利だと思います。

手順① Incoming webhook URLを取得

(公式)Slack での Incoming Webhook の利用に記載の手順でIncoming webhook URLの取得を行います。(画像の赤枠の部分を使用します!)
スクリーンショット 2020-06-02 23.24.29.png

【参考ページ】
(公式)Slack API
slackのIncoming webhookが新しくなっていたのでまとめてみた

手順② config/logging.phpと.env設定

続いてlaravelのプロジェクトの設定を行っていきます。

.envファイル

まず.envファイルに先ほど取得したIncoming webhook URLとログレベルを追記します。
今回はエラーが発生した際に通知をしたいのでerrorとしていますが、
他にemergency、alert、critical、warning、notice、info、debugなどがあります。
(公式)Laravelログシステムの設定

LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxxx  // 先程取得したIncoming webhook
LOG_SLACK_LEVEL=error // 通知したいログレベル

config/logging.php

続いて、config/logging.phpを一部変更していきます。
'stack'=> ['channels' => ['single']の部分に'slack'を追加します。
'slack'=> ['level' => ['critical']の部分をenv('LOG_SLACK_LEVEL', 'critical'),と変更し、.envファイルから引っ張ってくるようにします。

また、.envファイル等を更新したので、php artisan config:cacheをお忘れなく!
変更後は、下記通りです。

config/logging.php
'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single','slack'],
            'ignore_exceptions' => false,
        ],
        //省略
        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => 'Laravel Log',
            'emoji' => ':boom:',
            'level' => env('LOG_SLACK_LEVEL', 'critical')
        ],
]

すると、Controllerで何らかのエラーが起きた時に
こんなエラーログがSlackに送られてくるようになります。
(※今回が定義していない関数を返してみました。)
スクリーンショット 2020-06-03 13.22.39.png

さらに、Slackに投稿されるログのフォーマットをカスタマイズすることができます!
'short' => trueを追記してみます。

config/logging.php
'slack' => [
    'driver' => 'slack',
    'url' => env('LOG_SLACK_WEBHOOK_URL'),
    'username' => 'Laravel Log',
    'emoji' => ':boom:',
    'level' => env('LOG_SLACK_LEVEL', 'critical'),
    'short' => true, // 短めなフォーマット
]

すると一部が結合されて、こんな感じに。
スクリーンショット 2020-06-03 13.07.06.png

さらに短くしたい場合は、、、
'context' => falseを追記してください。

config/logging.php
'slack' => [
    'driver' => 'slack',
    'url' => env('LOG_SLACK_WEBHOOK_URL'),
    'username' => 'Laravel Log',
    'emoji' => ':boom:',
    'level' => env('LOG_SLACK_LEVEL', 'critical'),
    'short' => true, // 短めなフォーマット
    'context' => false // context部分を表示しない
]

そうすると詳細部分が全く表示されなくなります。この辺はお好みで・・・!
スクリーンショット 2020-06-03 13.07.13.png

ただ、このままだと開発環境でのエラー等も通知がきてしまうため、
開発時の.envファイルはLOG_CHANNELの部分をsingleに変更しておくと良いと思います!

.env
LOG_CHANNEL=single

こんな感じで簡単にSlackにログの投稿ができるようになりました!
よかったらHomeYouも使ってみてください^^

Twitterアカウントに匿名でレビュー(メッセージ)を残すことができる「HomeYou」

参考ページ

(公式)Slack API
(公式)Slack での Incoming Webhook の利用
slackのIncoming webhookが新しくなっていたのでまとめてみた
(公式)Laravelログシステムの設定

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10