====== 【Laravel】sqlクエリのログ出力 ======
本当は MySQL などが出力するクエリログを見るのが一番よいのですが、サーバの権限によっては残念ながら見れないことも。\\
そんなときは、以下の設定を行うことで、Laravel で実行した sql クエリのログを出力することが可能になります。
コンフィグの logging.php に sql ログ用のチャンネルを追加。
'channels' => [
// channels 内の一番下に追加
'sqllog' => [
'driver' => 'daily',
'path' => storage_path('logs/sql.log'),
'level' => 'debug',
'days' => 14,
'permission' => 0664, // パーミッションエラーが出るなら必要に応じて指定
],
],
];
AppServiceProvider.php の boot 関数内に処理を追加します。
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\ にクエリログが出力されるようになります。