【Laravel】ログを Slack に通知する
LaravelでログをSlackに通知する。
Laravelはバージョン5.6から標準でSlackにログを出力する機能があり、簡単に設定が可能です。
1.Slack の用意
Slackへの通知用Webhook URLを取得する必要があります。
以下のリンクを参考に取得してください。
Slack での Incoming Webhook の利用 | Slack
2.設定変更
.env
の修正を行います。
LOG_CHANNEL
を slack
に修正してSlackログの設定を追加します。
1
2
3
4
5
| # ログチャンネルを変更
LOG_CHANNEL=slack
# Slackログ設定
LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxxx # Webhook URL
|
Laravelでは以下の順でログレベルが設定されているので、たとえば LOG_LEVEL
に emergency
が設定されていた場合は emergency
未満の alert
のログが出ないようになっています。
必要に応じて LOG_LEVEL
の値を調整してください。
- emergency
- alert
- critical
- error
- warning
- notice
- info
- debug
実際に設定が使用される箇所は以下になります。
1
2
3
4
5
6
7
8
9
10
11
12
| <?php
return [
// 途中省略~~~
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => '\:boom\:',
'level' => env('LOG_LEVEL', 'critical'),
],
// 途中省略~~~
];
|
3. 使用方法
実際にコードで行った際にSlackへログレベルに合わせて通知が飛びます。
1
2
3
4
5
6
7
8
9
10
| use Illuminate\Support\Facades\Log;
Log::emergency('emergency');
Log::alert('alert');
Log::critical('critical');
Log::error('error');
Log::warning('warning');
Log::notice('notice');
Log::info('info');
Log::debug('debug');
|
4. 通常のログも出力させたい
Slackへの通知が大量にあったりするとSlackのAPI側に拒否されたりする事がありSlackへの通知が行えないなど問題が発生します。
そういう場合に通常のログも残しておかないとログを確認することができません。
なので通常ログとSlackログの2つのログを stack
で複数のログをまとめることができます。
1
2
3
4
5
6
7
8
9
| <?php
return [
// 途中省略~~~
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'slack'],
],
// 途中省略~~~
];
|
.env
の LOG_CHANNEL
を stack
に修正すると複数のログが出るようになります。
1
2
| # ログチャンネルを変更
LOG_CHANNEL=stack
|
5. ログを短くする
Slackへ通知するログが大きいと視認性が減るので短くしたい場合があります。
その場合は short
と context
の設定を追加します。
'short' => true
で短いフォーマット。
''context' => false
でログのcontext部分を表示しないようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <?php
return [
// 途中省略~~~
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => '\:boom\:',
'level' => env('LOG_LEVEL', 'critical'),
'short' => true, // 短いフォーマット
'context' => false // context部分を表示しない
],
// 途中省略~~~
];
|
参考