【Laravel】ログファイルに書き出す2つの方法

こんにちは!CODE CLUB965のKです!

今回は、Laravelにおいてログファイルにログを出力させる方法を2つ紹介したいと思います。

まず、プログラマにとってデバッグ作業は必須のスキルです。
デバッグの仕方を知っているのと知らないのとでは作業効率が全然違いいます。

Laravel文法を覚えるのも重要ですが、同じくらいデバッグのやり方を覚えることも重要なのでしっかり覚えておきましょう!

ログファイルに書き出す2つの方法

ログファイルに書き出す方法は以下の2つがあります。

・ ヘルパー関数のlogger()、info()を使用する
・ Logファサードを使用する

ひとつずつ説明したいと思います。

ヘルパー関数 logger()、info()

こちらの方法はとても簡単です。

引数にログ出力したい変数を渡してあげるだけで、勝手に見やすい形に整形してログファイルに書き出してくれます。

$arr = ['a' => 1, 'b' => 2, 'c' => 3];

logger($arr);
info($arr);

上記のように書くと「storage/logs/laravel.log」に下記のように書き出されます。

[2021-05-28 22:21:51] local.DEBUG: array (
  'a' => 1,
  'b' => 2,
  'c' => 3,
)  
[2021-05-28 22:21:51] local.INFO: array (
  'a' => 1,
  'b' => 2,
  'c' => 3,
)  

簡単、便利ですね。

Logファサード

ヘルパー関数と Logファサードのやってることはまったく同じです。
ただ、Logファサードの方は以下の設定を確認する必要があります。

.envファイルで「APP_DEBUG」がtrueであることの確認

おそらくデフォルトでtrueになっているとは思いますが、念の為確認してください。

Logファサードの記述とログローテーションの設定

あとは、デバッグしたい箇所にLogファサードを記述するだけで、「storage/logs/laravel.log」に記述されます。

書き方は、以下のように書きます。

use Illuminate\Support\Facades\Log;

$arr = ['a' => 1, 'b' => 2, 'c' => 3];

Log::debug($arr);
Log::info($arr);

ちなみに、デバッグでLogファサードを頻繁に利用するなら、ログローテーションの機能を設定しましょう。
ちなみにログローテーションとは、以下の機能のことです。

【ログローテーション】
一定期間が過ぎたログを削除したり、ログデータの総量が一定の容量を超えたら最も古いログを削除したりする機能

設定方法

ログの設定は、.env ファイルで簡単に設定できます。
デフォルトでは stack (複数のログチャンネルを一つのログチャンネルへ集結)するようになっています。

これを日付ごとにローテーションさせたい場合は、

LOG_CHANNEL=daily

と記述します。

また、config/logging.php でも設定が可能です。
デフォルトの設定は、以下のように stack になっています。

'default' => env('LOG_CHANNEL', 'stack'),

ログ設定に関しては、公式を参考にするのが一番間違いないので詳しく知りたい場合は読んでください。

参考:Laravel 8.x ログ

ログの保存日数を設定することも可能

ログファイルが増えた時にローテートしますが、config/logging.php でログの保存日数を指定することができます。

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

最後に

今回は、Laravelでログファイルに書き出す2つの方法について紹介しました。

ちなみに以下のQiitaの記事も参考になりましたので読んでみてください。

・Qiita:Laravel5.6 での ログ設定について
https://qiita.com/hrdaya/items/b01d5621937a0710ca64

それでは、また!

Follow me!