びったんびったん

ユーザビリティ・プログラミングについて。

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 タグで改行を可視化している。

f:id:hakomof:20150801095107p:plain

ブラウザにリッチに表示する dd()

<?php

Route::get('/', function() {

    $message = view();

    dd($message);

    return 'OK';
});

dump and die の略。上述の2つと違ってクラスインスタンスとか複雑なものも表示できる。 die と名のつく通りアプリケーションの実行を停止する( OK が表示されてないよね)。なんかすごい。

f:id:hakomof:20150801095108p:plain

まとめ

logger($message, $context);

ログファイルに書きだすので残る。

echo '<pre>' . var_export($message, true) . '</pre>';

ブラウザに表示する。

dd($message);

ブラウザにリッチに表示する。クラスインスタンスとか複雑なものも表示できる。アプリケーションの実行を停止する。

以上です。それでは Laravel のよきデバッグライフを。