【Laravel】複数のチャネルにログを出力する

こんにちは。今回はLaravelで複数のチャネルにログ出力する方法を解説します。Laravelではログの出力先設定をチャネルと呼びます。Laravelでは様々なログ出力先を作成することができます。通常のファイル出力の他に、syslogやslackなどにも配信することができます。このチャネルは幾つでも作成することができ、同時に複数のチャネルにログ出力することもできます。

複数のチャネルにログを配信できると、例えばログファイルに出力すると同時にSlackにログを配信することができるようになります。設定はとても簡単です。それでは解説していきます。

設定方法

ログの設定ファイルであるconfig/logging.phpを見てみましょう。チャンネルの設定部分を以下に一部抜粋しました。stack, single, dailyの3つのチャンネルが設定されていることがわかります。

    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single'],
            'ignore_exceptions' => false,
        ],

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => env('LOG_LEVEL', 'debug'),
        ],

        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => env('LOG_LEVEL', 'debug'),
            'days' => 14,
        ],

今回はstackに着目します。このstackというチャネルは他のチャネルにログを配信する動作をします。配信先のチャネルはchannels要素に設定します。上記のコードの場合はchannelsにsingleを設定しています。この場合、stackチャネルに対してログ出力するとsingleチャネルにログ配信されます。このstackチャネルの性質を利用して、複数チャネルへのログ配信を実現することができます。

複数のチャネルにログ配信するためには、stackチャネルのchannelsに複数のチャネルを設定します。ではsingleとdailyの両方にログ配信してみましょう。

        'stack' => [
            'driver' => 'stack',
            'channels' => ['single', 'daily'],
            'ignore_exceptions' => false,
        ],

channelsにsingleとdailyを設定しました。これでconfig/logging.phpの設定は完了です。最後に、 stackチャネルにログ出力するように.envを設定しましょう。

LOG_CHANNEL=stack

これでsingleとdailyの両方にログが出力されます。

まとめ

今回はログを複数チャネルに出力する方法を解説しました。ログの設定一つで割と柔軟にできるので、開発時はすごく役に立つ機能だと思います。また、運用環境と開発環境でログの出力先を変更したい場合などは、stackを複数作成しておくことで解決することができます。複数設定する方法はまた別で記事にしたと思います。

Laravel

Posted by kobainmac