こんばんは、Webディレクターのエリカです。
今日は、LaravelのログをSlackに投稿してみます。
Laravelの設定
ログの設定は下記にまとまっています。
config/logging.php
ここではチャンネルごとにどのようにログを扱うかの設定がまとめられており、デフォルトで利用されるチャンネルは以下のように定義されています。env
を利用して上書きできますが、初期値は stack
チャンネルが指定されています。
'default' => env('LOG_CHANNEL', 'stack'),
そして、 stack
チャンネルは下記のように設定されています。
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
],
ログドライバー( driver
)は、 stack
としています。今回は、「マルチチャンネル」チャンネルを作成するためのラッパー機能を作ります。
なので、この stack
チャンネル自体がログを書き出すことはなく、 channels
に設定されているチャンネルそれぞれがログの書き出しを行うことになります。
複数のチャンネルをまとめて扱うことができますが、初期値では、 daily
チャンネルのみが設定されています。
次に、daily
チャンネルの設定です。
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
ログドライバー( driver
)は、 daily
としています。これは、毎日ファイルを切り替えるタイプのドライバになるものです。ログの書き出し先や、ログレベルなどが設定されています。
書き出し先の初期値は、 storage/logs/laravel.log
になっています。
それでは、 stack
チャンネルを利用したログの書き出し(実際は daily
チャンネルによる)を試します。
artisan tinker
や、Laravelアプリケーション内の適当なファイルなどで、以下のコマンドを実行します。
// デフォルトのログチャンネルにログレベル debug でメッセージを渡す。
logger('foo', ['context' => 'bar']);
すると、 storage/logs/
に、laravel-日付.log
が、下記の内容で書き出されているはずです。
[2019-04-01 12:34:56] local.DEBUG: foo {"context":"bar"}
また、 Log
ファサードを利用すると、それぞれのログレベルを指定してメッセージを送信することができます。
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
Slackログチャンネルの設定
それでは、ログチャンネルの slack
を利用して、Slackにログを投稿できるようにしていきます。
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
env
に LOG_SLACK_WEBHOOK_URL
を指定するだけで良さそうです。
下記を参考に、Slackチャンネルに外部から投稿するための、Webhook URL を取得します。
SlackとRedmineを連携し、登録したチケットの更新を通知する方法
これを、下記のように .env
に追記します。
LOG_SLACK_WEBHOOK_URL=取得したWebhookURL
デフォルトの stack
ログチャンネルに、以下のように slack
も追加します。
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'slack'],
],
以上で準備完了です。
ログチャンネル slack
のログレベルは、 critical
なので、それ以上のログレベルでメッセージを送る必要があります。
Log::critical('foo', ['context' => 'bar']);
まとめ
緊急度の高いエラーが発生したときなどに、インフラ側の設定を特にせずともLaravel側のコードだけでSlack連携が簡単にできるのはとても便利ですね。それではまた。
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。