Laravel 5 のデバッグ出力
Laravel 5 でデバッグ出力する3つのやり方についてまとめる。
ログファイルに書きだす
2通りの書き方がある。
ヘルパー関数 logger(), info()
<?php Route::get('/', function() { $message = ['a' => 1, 'b' => 2, 'c' => 3]; logger($message); info($message); // logger()->notice($message, $context); // logger()->warning($message, $context); // logger()->error($message, $context); // logger()->critical($message, $context); // logger()->alert($message, $context); // logger()->emergency($message, $context); return 'OK'; });
storage/logs/laravel.log に書き出される。
[2015-07-31 13:40:35] local.DEBUG: array ( 'a' => 1, 'b' => 2, 'c' => 3, ) [2015-07-31 13:40:35] local.INFO: array ( 'a' => 1, 'b' => 2, 'c' => 3, )
配列ライクは var_export() で、 Jsonable なクラスインスタンスは JSON 文字列に内部で見やすく整形してくれる。なので、何も考えずに引数に渡してよい。
Log ファサード
<?php namespace App\Http\Controllers; use Log; // ... class MyController extends Controller { public function index() { $message = ['a' => 1, 'b' => 2, 'c' => 3]; Log::debug($message); Log::info($message); // Log::notice($message, $context); // Log::warning($message, $context); // Log::error($message, $context); // Log::critical($message, $context); // Log::alert($message, $context); // Log::emergency($message, $context); return 'OK'; } }
ヘルパー関数と Log ファサードのやってることはまったく同じ。ただ、 Log ファサードはファイルの先頭で use Log; しないといけなかったり、 use Log; できない php ファイルがある?のでヘルパー関数の logger() のほうが便利。グローバル関数は最強だな。
ブラウザに表示する var_export()
<?php Route::get('/', function() { $message = ['a' => 1, 'b' => 2, 'c' => 3]; echo '<pre>' . var_export($message, true) . '</pre>'; return 'OK'; });
Laravel と関係ない PHP おなじみのやり方。一応説明すると var_export() で見やすく整形して pre タグで改行を可視化している。
ブラウザにリッチに表示する dd()
<?php Route::get('/', function() { $message = view(); dd($message); return 'OK'; });
dump and die の略。上述の2つと違ってクラスインスタンスとか複雑なものも表示できる。 die と名のつく通りアプリケーションの実行を停止する( OK が表示されてないよね)。なんかすごい。
まとめ
logger($message, $context);
ログファイルに書きだすので残る。
echo '<pre>' . var_export($message, true) . '</pre>';
ブラウザに表示する。
dd($message);
ブラウザにリッチに表示する。クラスインスタンスとか複雑なものも表示できる。アプリケーションの実行を停止する。
以上です。それでは Laravel のよきデバッグライフを。