ログファイルを作成するのは、デバッグのためや後のチェックに使われるために実行の記録を残すなど、いろいろな目的で使われます。Laravelでは、laravel.logというファイルがデフォルトでstorage/logsに作成されて、そこでいろいろな情報を記録するのに使われます。しかし、特定のプログラムの実行でlaravel.logではないファイルにログを残したいときはどうしましょう?

Laravelではこれはいたって簡単。

まず、config/logging.phpのファイルをエディターで開いて、以下のようにcustomのチャンネルを追加します。

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

        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],
...
       'custom' => [
            'driver' => 'single',
            'path' => storage_path('logs/custom.log'),
            'level' => 'info',
            'permission' => 0666,
        ],
    ],
];

そして、tinkerでログを書き込みます。

>>> Log::channel('custom')->info('テストだよ');
=> null

以下のように、custom.logのファイルが作成されています。上の設定ではパーミッションがlaravel.logと異なることに注意してください。デフォルトではpermissionは0644ですが上の設定では0666として誰もが読み書き自由となっています。

$ ls -l storage/logs
-rw-rw-rw- 1 kenji kenji    52 Apr  3 14:17 custom.log
-rw-r--r-- 1 kenji kenji 18525 Apr  3 13:14 laravel.log

そしてファイルの中身は、

$ cat storage/logs/custom.log
[2021-04-03 21:17:05] local.INFO: テストだよ 

ちゃんと書き込まれていますね。

もう1つテストです。今度は、info()でなくdebug()の関数を使います。

>>> Log::channel('custom')->debug('デバッグだよ')
=> null

ファイルの中身をチェックすると、

$ cat storage/logs/custom.log
[2021-04-03 21:17:05] local.INFO: テストだよ 

書き込みがありません。これは、設定でlevelをinfoと設定したためです。infoの下のレベルであるdebugでは書き込みが起こらないのです。

ちなみに以下がレベルのランクです。

Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);

By khino