Laravel5.6 - Slackでロギングできるようになったので雑に試してみる

Qiita初投稿。
雑 of 雑で参ります。

|環境| |
|:-:|:-:|
|OS|Windows|
|Laravel|5.6|
|PHP|7.2.4|
筆者はxamppで行ってます。

# Laravelでプロジェクトを作成する
```laravel new project```
とりあえずサクッとlaravelコマンドでプロジェクトを作成します。

# 適当にルーティングを決める
```route/web.php

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Route::get('/info', 'LogController@info')->name('info');
Route::get('/debug', 'LogController@debug')->name('debug');
Route::get('/warning', 'LogController@warning')->name('warning');
Route::get('/error', 'LogController@error')->name('error');
```

雑ですが、こんなもんです。
ロギングなので個人的によく使っている```info, debug, warning, error```をピックアップしました。

# LogControllerを作成する
とにかくシンプルにわかりやすくするため、特になんの捻りもしません。
/debug みたいにURL直打ちしたらlogが出るようにします。

```app/Http/Controller/LogController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Log;
use App\Http\Controllers\Controller;

class LogController extends Controller
{
    public static function info()
    {
    	Log::info('Slack Test - Info');

    	return view('welcome');
    }

    public static function debug()
    {
    	Log::debug('Slack Test - Debug');

    	return view('welcome');
    }

    public static function warning()
    {
    	Log::warning('Slack Test - Warning');

    	return view('welcome');
    }

 	public static function error()
 	{
 		Log::error('Slack Test - Error');

 		return view('welcome');
 	}   
}
```

# Logging.phpの設定
さて、とりあえずログが出る機構は作れました。
これをデフォルトで実行するとLarave.logに ```log.ERROR: Slack Test - Error  ``` とログが表示されるハズです。

Laravel5.6で追加されたLogging.phpを書き換えていきます。

```config/logging.php

<?php

use Monolog\Handler\StreamHandler;

return [
    'default' => env('LOG_CHANNEL', 'stack'),
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'name' => 'laravel_logging', // チャンネル名を入力
            'channels' => ['single', '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' => 7,
        ],

        'slack' => [
            'driver' => 'slack',
            'url' => env('LOG_SLACK_WEBHOOK_URL'),
            'username' => 'Laravel Log',
            'emoji' => ':boom:',
            'level' => 'debug', // デフォルトはcriticalなのでdebugに修正
        ],

        'stderr' => [
            'driver' => 'monolog',
            'handler' => StreamHandler::class,
            'with' => [
                'stream' => 'php://stderr',
            ],
        ],

        'syslog' => [
            'driver' => 'syslog',
            'level' => 'debug',
        ],

        'errorlog' => [
            'driver' => 'errorlog',
            'level' => 'debug',
        ],
    ],

];
```
めんどくさいのでそれ以外の設定はデフォルトです。

# slack側の設定
.envファイルに```LOG_SLACK_WEBHOOK_URL```を設定しなくてはなりません。

まずはログ用のチャンネルを作ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/248518/560e9503-ab65-9b83-8927-e4f2174dc2f8.png)

次に[imcoming webhook](https://slack.com/apps/A0F7XDUAZ-incoming-webhooks)アプリと連携させます。
先ほど作ったチャンネルを選択して追加
![image.png](https://qiita-image-store.s3.amazonaws.com/0/248518/0e380d1f-0a01-d017-1e59-6a5a9c1150c4.png)

そうすると設定画面に遷移するので画面下側のWebhook URLをコピーして設定保存しておく。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/248518/64df3459-8960-593f-fa57-1c25e7d3a612.png)


# .envにWebhook URLを記述
先ほどコピーしたWebhook URLを.envファイルに記述します
```LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXXXXXXXXXXX/XXXXXXXXXXXX/XXXXXXXXXXXXXXX```





# これで終わりです。試してみましょう
- /info
![image.png](https://qiita-image-store.s3.amazonaws.com/0/248518/d1f7193a-6d2c-e74b-cd7e-3d7f38f77681.png)
 

- /debug
![image.png](https://qiita-image-store.s3.amazonaws.com/0/248518/6ef5eef7-8603-6594-591d-3a54a4ceb58b.png)

- /error
![image.png](https://qiita-image-store.s3.amazonaws.com/0/248518/1adf44a7-e51b-386d-e972-cd0524c7a700.png)

- /warning
![image.png](https://qiita-image-store.s3.amazonaws.com/0/248518/c10ab0d0-9926-9550-ee6a-b745af6c389e.png)

ちゃんときれいに出来てますね。
案外slackでロギング悪くないと思いました。（ちゃんとログ設計して連続で出なければ）


なんか面白そうなのがあったらまた試して書こうと思います。