Laravel
[Laravel] SQL Log
초오오이
2025. 6. 2. 11:24
1. 'config/logging.php' 수정
라라벨의 로그 관련 설정은 기본적으로 해당 파일에서 지정한다.
아래와 같이 sql 관련 설정을 추가한다.
'channels' => [
// ... 기존 채널
'sql' => [
'driver' => 'daily', // 일별로 로그 관리
'path' => storage_path('logs/sql.log'), // 로그 파일 경로
'level' => 'debug', // 로그 레벨
'days' => 14, // 보관 일수
],
],
2. 'app/Providers/AppServiceProvider.php'의 'boot()' 메서드에 추가
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
public function boot(): void
{
DB::listen(function ($query) {
$location = collect(debug_backtrace())->filter(function ($trace) {
return !str_contains($trace['file'], 'vendor/');
})->first(); // vendor/가 아닌 호출 스택의 첫 위치
$bindings = implode(", ", $query->bindings); // 바인딩 값을 문자열로 변환
Log::channel('sql')->info("
------------
Sql: $query->sql
Bindings: $bindings
Time: $query->time
File: {$location['file']} // 파일 위치
Line: {$location['line']} // 코드 라인
------------
");
});
}
이렇게 설정하면 'storage/logs' 아래에 일자별로 sql 로그가 기록된다.
보안상, 성능상의 문제가 있을 수 있기 때문에 개발 환경에서만 설정하는 것이 권장된다.