LoginSignup
60
64

More than 3 years have passed since last update.

Laravelでログを出力する

Last updated at Posted at 2016-07-27

前置き

この記事はlaravel5.0で動作確認を行ない書いております.

laravelでのログの使い方

laravelでログ出力を行うのは簡単で, ログファサードを使用して

Log::debug('デバッグメッセージ')

と, ログレベルに対応したメソッドを呼び出してやるだけでログが書き出されます.

ログの出力レベルを変更する

デフォルトではログの出力レベルが最低(あるいは最高?)のdebugレベルになっており
全てのログが出力されます.
開発段階では, これでよいのですが, 流石にProd環境で全てのログを出すのもバカバカしいので,
ログの出力レベルを変えたいところです.
ちょっと調べたところ, ログ出力レベルには対応する設定項目があるわけではなく, Loggerの実体であるMonoLogインスタンスに, 直接設定を渡してやる必要のようだ.
どこでこの設定を行うのかだが, DIコンテナの生成時か, 各コントロール共通のMiddlewareを作ってその中でやるかするのが良さそうです.
ここでは, 参考サイトを真似て, AppServiceProvider#registerで行うことにします.

app/Providers/AppServiceProvider.php
    public function register()
    {
        $this->app->bind(
            'Illuminate\Contracts\Auth\Registrar',
            'App\Services\Registrar'
        );

        // ログレベルの設定
        $monolog = Log::getMonoLog();
        foreach ($monolog->getHandlers() as $handler) {
            $handler->setLevel(env('APP_LOG_LEVEL', 'error'));
        }
    }

あとは, 各環境毎に.envファイルでAPP_LOG_LEVELを設定してあげるだけでOKです.

追記

laravelのバージョン5.2では, config/app.phpでlog_levelの値を設定することができるようです.

config/app.php
'log_level' => env('APP_LOG_LEVEL', 'debug'),

コメントで教えてくださった@nunulk さん, ありがとうございました

実行されたSQLをログに出したい

SQL実行時に, illminate.queryというイベントが発生するので, このイベントに対するイベントハンドラを用意してやれば良い.

こんな感じのイベントハンドラクラスを作成し

class QueryLogTracker {

    /**
     * Create the event handler.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }
    /**
     * Handle the event.
     *
     * @param  illuminate.query  $event
     * @return void
     */
    public function handle($query, $bindings)
    {
        //
        if (env(APP_DEBUG)) {
            Log::debug('EXECUTE SQL:[' . $query . ']', ['BINDINGS'=>json_encode($bindings)]);
        }
    }
}

app/Providers/EventProvider.phpにて, illminate.queryイベントに対するイベントハンドラとして登録してやればOK

    /**
     * The event handler mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        'event.name' => [
            'EventListener',
        ],
        'illuminate.query' => [ // 追加
            'App\Handlers\Events\QueryLogTracker',
        ],
    ];

参考

60
64
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
60
64