JavaScriptを有効にしてください

【Laravel】ログを Slack に通知する

 ·  ☕ 2 分で読めます

【Laravel】ログを Slack に通知する

LaravelでログをSlackに通知する。
Laravelはバージョン5.6から標準でSlackにログを出力する機能があり、簡単に設定が可能です。

1.Slack の用意

Slackへの通知用Webhook URLを取得する必要があります。
以下のリンクを参考に取得してください。
Slack での Incoming Webhook の利用 | Slack

2.設定変更

.env の修正を行います。
LOG_CHANNELslack に修正してSlackログの設定を追加します。

1
2
3
4
5
# ログチャンネルを変更
LOG_CHANNEL=slack

# Slackログ設定
LOG_SLACK_WEBHOOK_URL=https://hooks.slack.com/services/xxxx # Webhook URL

Laravelでは以下の順でログレベルが設定されているので、たとえば LOG_LEVELemergency が設定されていた場合は emergency 未満の alert のログが出ないようになっています。
必要に応じて LOG_LEVEL の値を調整してください。

  1. emergency
  2. alert
  3. critical
  4. error
  5. warning
  6. notice
  7. info
  8. 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'],
        ],
        // 途中省略~~~
];

.envLOG_CHANNELstack に修正すると複数のログが出るようになります。

1
2
# ログチャンネルを変更
LOG_CHANNEL=stack

5. ログを短くする

Slackへ通知するログが大きいと視認性が減るので短くしたい場合があります。
その場合は shortcontext の設定を追加します。
'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部分を表示しない
        ],
        // 途中省略~~~
];

参考

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer