ユーザ用ツール

サイト用ツール


サイドバー

プログラム言語:php:laravel:ログ出力:sqlクエリのログ出力

【Laravel】sqlクエリのログ出力

本当は MySQL などが出力するクエリログを見るのが一番よいのですが、サーバの権限によっては残念ながら見れないことも。
そんなときは、以下の設定を行うことで、Laravel で実行した sql クエリのログを出力することが可能になります。

コンフィグの logging.php に sql ログ用のチャンネルを追加。

config\logging.php

    'channels' => [

        // channels 内の一番下に追加
        'sqllog' => [
            'driver' => 'daily',
            'path' => storage_path('logs/sql.log'),
            'level' => 'debug',
            'days' => 14,
            'permission' => 0664,    // パーミッションエラーが出るなら必要に応じて指定
        ],
    ],

];

AppServiceProvider.php の boot 関数内に処理を追加します。

app\Providers\AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use DB;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // 本番環境では出力しない
        if (config('app.env') !== 'production') {
            DB::listen(function ($query) {
                $sql = $query->sql;
                $cnt = count($query->bindings);
                for ($i=0; $i<$cnt; $i++) {
                    $binding = $query->bindings[$i];
                    if (strlen($binding) > 200) {
                        $binding = mb_strimwidth($binding, 0, 200, '...');
                    }
                    $sql = preg_replace("/\?/", $binding, $sql, 1);
                }

                // channel で出力先のチャンネルを指定
                // info に出力したい文字列を指定
                Log::channel('sqllog')->info('[' . $query->time .  'ms] ' . $sql);
            });
        }
    }
}

これで storage\logs\ にクエリログが出力されるようになります。

コメント

コメントを入力. Wiki文法が有効です:
 
プログラム言語/php/laravel/ログ出力/sqlクエリのログ出力.txt · 最終更新: 2020/06/02 12:10 by humolife