【Laravel】ログを設定

もくじ

ログ設定

Laravelをインストールすれば初めからログが出力されるように設定されています。

LOG_CHANNEL=stack

bonoponz.hatenablog.com

stackチャンネルは、複数のログチャンネルを単一のチャンネルに集約するために使用します。

ここを変更することでカスタマイズすることができます。

出力先

デフォルト

storage/logs/配下にあるlaravel.logにはかれます。

任意の場所に設定

config/logging.phpの下記★のパスを変更すれば、ログの出力先を任意に設定できます。

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

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

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

'channels' => ['single'],なら★1を変えます。

日毎にログ出力

日毎にログを切り出したいときはチャネルをdailyにします

LOG_CHANNEL=daily

.envファイルをdailyに変更したらlogging.phpも確認しましょう。

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

ファイル名

デフォルトがlaravel.logに対して、laravel-YYYY-MM-DD.logの形式になります。

dailyに設定していなければlaravel.log内にどんどん追加されていきます。

最大保存日数

'days' => 14,

デフォルトでは最大保存日数は14になっています。

この場合14日分保存後にさらにログが出力されたら古いものから削除されます。
もし0にした場合削除されずログが残り続けディスクを圧迫することになるので注意しましょう。

ログのフォーマット

[YYYY-MM-DD HH:II:SS] 環境.ログレベル: メッセージ コンテキスト

たとえば、アプリケーションキーの設定を忘れた場合に出力されるエラーだとこうなります。一部加工済み。

[2022-04-01 00:00:00] laravel.ERROR: No application encryption key has been specified. {"exception":"[object] (RuntimeException(code: 0): No application encryption key has been specified. at  xxx/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.php:80)

ログを仕込む

コントローラーなどに仕込むことで任意のログを出力できます。
ヘルパーやファザードを使えば簡単に実装できます。

ログレベル

  • emergency
  • alert
  • critical
  • error
  • warning
  • notice
  • info
  • debug

ヘルパー

logger('test', ['foo' => 'bar']);
info('test', ['foo' => 'bar']);
logs()->notice('test', ['foo' => 'bar']);
logs()->warning('test', ['foo' => 'bar']);
logs()->error('test', ['foo' => 'bar']);
logs()->critical('test', ['foo' => 'bar']);
logs()->alert('test', ['foo' => 'bar']);
logs()->emergency('test', ['foo' => 'bar']);

ファサード

use Illuminate\Support\Facades\Log;

Log::debug('test', ['foo' => 'bar']);
Log::info('test', ['foo' => 'bar']);
Log::notice('test', ['foo' => 'bar']);
Log::warning('test', ['foo' => 'bar']);
Log::error('test', ['foo' => 'bar']);
Log::critical('test', ['foo' => 'bar']);
Log::alert('test', ['foo' => 'bar']);
Log::emergency('test', ['foo' => 'bar']);

出力結果

[2022-04-01 00:00:00] local.DEBUG: test {"foo":"bar"} 
[2022-04-01 00:00:00] local.INFO: test {"foo":"bar"} 
[2022-04-01 00:00:00] local.NOTICE: test {"foo":"bar"} 
[2022-04-01 00:00:00] local.WARNING: test {"foo":"bar"} 
[2022-04-01 00:00:00] local.ERROR: test {"foo":"bar"} 
[2022-04-01 00:00:00] local.CRITICAL: test {"foo":"bar"} 
[2022-04-01 00:00:00] local.ALERT: test {"foo":"bar"} 
[2022-04-01 00:00:00] local.EMERGENCY: test {"foo":"bar"} 

参考URL

ログ 8.x Laravel

LaravelでLogファイルの作成(2)ログファイルをローテーション – ララジャパン

Laravel ログを出力する - Qiita