Slack for Laravel という便利ライブラリーがあったのでこちらを利用して Laravel の Log を Slack へ流せるようにします。
ライブラリのインストール
composer require maknz/slack-laravel
サービスを登録
config/app.php
'providers' => [
...
Maknz\Slack\Laravel\ServiceProvider::class,
],
'aliases' => [
...
'Slack' => Maknz\Slack\Laravel\Facade::class,
],
設定
設定ファイルを作成
php artisan vendor:publish
Slack 管理画面で Webフックを作成
フック新規作成画面でフックを作成して「Webhook URL」をコピー。
設定ファイルを編集
上記でコピーした URL を endpint にペーストし、その他の設定も調整する。
config/slack.php
return [
'endpoint' => 'https://hooks.slack.com/hogehoge',
'channel' => '#hogehoge',
...
];
AppServiceProvider.php にログ送信処理を追記
app/Providers/AppServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
\Log::listen(function ($level, $message) {
\Slack::attach([
'text' => date('r'),
'fields' => [
[
'title' => '[' . strtoupper($level) . ']',
'value' => $message,
],
],
])->send();
});
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
※ Listener クラスを作って EventServiceProvider.php に登録してもよいかも。
テスト送信
\Log::debug('テストメッセージです');
\Log::debug(['テストメッセージ1です','テストメッセージ2です']);
メッセージの体裁を調整する
以下を確認するとなんとなくわかるのでいろいろいじってみると幸せになれそう。
※ 上記のままだとすべての Log が送られてしまうので、実際には APP_ENV などによって送信するログレベルを調整する必要があるかと思います。