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 로그가 기록된다.

보안상, 성능상의 문제가 있을 수 있기 때문에 개발 환경에서만 설정하는 것이 권장된다.