- .envファイルの設定:
まず、Laravelプロジェクトのルートディレクトリにある
.env
ファイルを開きます。以下の設定を追加します。
DB_DEBUG=true
この設定により、Laravelはクエリのログを有効にし、storage/logs
ディレクトリに保存します。
- ログの設定:
次に、Laravelのログ設定を変更します。
config/logging.php
ファイルを開き、以下のように変更します。
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'],
],
// 他のログチャネルの設定...
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
],
],
上記の変更により、Laravelはdaily
チャネルを使用してログを記録します。ログのレベルはdebug
に設定されており、storage/logs/laravel.log
ファイルに保存されます。
- クエリログの表示: 上記の設定が完了したら、クエリログを表示する方法をいくつか紹介します。
a. ルートファイルで直接表示する方法:
routes/web.php
ファイルに以下のルートを追加します。
Route::get('/queries', function () {
\DB::listen(function ($query) {
var_dump($query->sql, $query->bindings, $query->time);
});
});
上記のルートをアクセスすると、実行されたクエリとそのバインディングパラメータ、実行時間が表示されます。
b. イベントリスナーを使用する方法: イベントリスナーを作成し、クエリイベントをキャッチしてログに書き込む方法もあります。まず、以下のコマンドでイベントリスナーを生成します。
php artisan make:listener QueryListener
生成されたapp/Listeners/QueryListener.php
ファイルを以下のように編集します。
namespace App\Listeners;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Support\Facades\Log;
class QueryListener
{
public function handle(QueryExecuted $query)
{
Log::debug($query->sql, [
'bindings' => $query->bindings,
'time' => $query->time,
]);
}
}
次に、app/Providers/EventServiceProvider.php
ファイルを開き、以下のようにイベントリスナーを登録します。
protected $listen = [
QueryExecuted::class => [
QueryListener::class,
],
];
これにより、クエリが実行されるたびにQueryListener
が呼び出され、ログにクエリの情報が記録されます。
これらの方法を使用することで、Laravelで実行されるすべてのクエリをログに記録することができます。デバッグやパフォーマンスの分析に役立つだけでなく、クエリの実行状況を把握するのにも便利です。