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を設定しなくてはなりません。

まずはログ用のチャンネルを作ります。

次にimcoming webhookアプリと連携させます。
先ほど作ったチャンネルを選択して追加

そうすると設定画面に遷移するので画面下側のWebhook URLをコピーして設定保存しておく。

.envにWebhook URLを記述

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

これで終わりです。試してみましょう

  • /info

  • /debug

  • /error

  • /warning

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

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