라라벨 5 eloquent orm query log 남기기
오래된 문서입니다. 대신 Laravel Event Listener를 사용하여 엘로퀀트 쿼리 로그(Eloquent Query Logging) 남기기 를 참고하세요.
laravel 5.1 부터는 엘로퀀트 ORM 의 쿼리 로그를 보려고 DB::getQueryLog() 호출해도 SQL Query log 가 남지 않음.
방법 1. Event 등록
다음 코드를 app/Provides/AppServiceProvider.php 에 추가
app/Provides/AppServiceProvider.php
public function register() { if ($this->app->environment() !== 'production') { \Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) { \Log::info([ 'sql' => $query->sql, 'bindings' => $query->bindings, 'time' => $query->time, ]); }); } }
일반 로그와 섞여서 보기가 불편하면 Log channel 기능을 사용하여 sql log file 을 분리
config/logging.php
'channels' => [ 'sql' => [ 'driver' => 'daily', 'path' => storage_path('logs/sql.log'), 'level' => 'debug', 'days' => 14, ],
app/Provides/AppServiceProvider.php
public function register() { if ($this->app->environment() !== 'production') { \Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) { \Log::channel('sql')->info([ 'sql' => $query->sql, 'bindings' => $query->bindings, 'time' => $query->time, ]); }); } }
방법 2. laravel-sql-logger 패키지 사용
https://github.com/mnabialek/laravel-sql-logger 를 설치하여 SQL logging.
패키지 설치
composer require mnabialek/laravel-sql-logger
config/app.php 의 providers 등록
Mnabialek\LaravelSqlLogger\Providers\ServiceProvider::class,
publishing
php artisan vendor:publish --provider="Mnabialek\LaravelSqlLogger\Providers\ServiceProvider"
- config/sql_logger.php 설정
또는 .env 에 동작 설정
SQL_LOG_QUERIES=true SQL_LOG_SLOW_QUERIES=true SQL_SLOW_QUERIES_MIN_EXEC_TIME=100 SQL_LOG_OVERRIDE=false SQL_LOG_DIRECTORY=logs/sql SQL_CONVERT_TIME_TO_SECONDS=false SQL_LOG_SEPARATE_ARTISAN=false