LaravelでMonologを使って、SlackにERROR通知する

今、携わっているプロジェクトで謎のエラーでアプリケーションが
落ちる事があり、エラーログを検知して、Slackに通知する事になった！

#やりたいこと
* Monologを使ってSlackへ通知したい

#環境
* Laravel5.4
* php7.1
* local開発環境(MAMP)

#手順
1.Slackでアプリを発行する
2.monologをインストール
3.monologの設定を行う
4.動作確認

##1.Slackでアプリを発行する
###1.1まずはここにアクセスして、　https://api.slack.com/apps

クリックする　/　入力する
1. Create New App
2. App Name
3. Development Slack Team
4. Create App

<img width="1245" alt="スクリーンショット 2017-12-10 5.43.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/85181/3b55aa31-e956-0b34-c092-5b28859b7f7f.png">

###2. スコープ設定
まずはスコープの設定をしないとアプリをインストールできません。
今回のサンプルではチャンネルにメッセージを投稿するだけのスコープだけ設定します。
どのスコープでどういうことができるかは今回取り扱いませんので、ドキュメントを参照ください。

permission scopeをクリック
![キャプチャ.png](https://qiita-image-store.s3.amazonaws.com/0/85181/b33f37b9-54b0-bfe3-c678-ae186d505023.png)
* 必要なscopeを選択
* 今回はSend messages as sample.

![キャプチャ２.png](https://qiita-image-store.s3.amazonaws.com/0/85181/0be854c8-9770-cff5-72a9-022ee14cf20b.png)

###3. Slackにアプリをインストール
ちゃんとScopeが設定されていると緑色になっている[Install App To Team]を押します。

![キャプチャ３.png](https://qiita-image-store.s3.amazonaws.com/0/85181/ba95687b-d486-ff49-6dae-b8444e85f296.png)
Team名を確認して間違いがなければ[Authorize]を押します。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131323932392f31663834313432382d633465342d356137392d386235622d3532363461346564303439372e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/85181/f5ced67d-0a2e-1f59-529d-e9c9caf22cf0.png)

リダイレクトされた先にTokenが書かれていますのでこれを普通のTokenとして使ってください。

###4. Tokenを探す
先のTokenを紛失したときの探し方。
https://api.slack.com/apps

アプリを選ぶ。
sampleをクリック
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131323932392f34383237333635302d333236632d373934662d356363372d3531323265373336353333332e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/85181/db0aa7a4-1d10-be0c-1083-6531cb4d0a9a.png)

[OAuth & Permissions]をクリック
[OAuth Access Token]をコピー

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3131323932392f36376161353038332d636266382d376665382d663431372d6263343865383530616433342e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/85181/196bfac6-41d9-5c1e-9b74-fc6d9744e0be.png)

##2.monologをインストール
下記のコマンドを実行して、monologをインストール

```
$ composer require monolog/monolog
```

#3.monologの設定を行う
AppServiceProvider.php　に先ほど発行したtokenの設定などを行う。

```php
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
use Log;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {

        Log::listen(function () {

            $monolog = \Log::getMonolog();

            $slackHandler = new \Monolog\Handler\SlackHandler(
                'token',
                '#channel-name',
                'Monolog',
                true,
                null,
                \Monolog\Logger::ERROR
            );

            $monolog->pushHandler($slackHandler);
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

```

#4.動作確認
\Monolog\Logger::ERROR を設定した場合
Slackに指定したメッセージが表示されていれば成功！！

```php
// 意図的にSlackへ通知する
\Log::error('TEST');
```

<img width="722" alt="スクリーンショット 2017-12-10 6.04.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/85181/bdb611fc-cefb-2786-b4c6-075cf95dd011.png">


##参考
https://qiita.com/qiita-kurara/items/04a3de448506e1d7876c

https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21