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,
]);
});
}
}
PHP
일반 로그와 섞여서 보기가 불편하면 Log channel 기능을 사용하여 sql log file 을 분리
config/logging.php
'channels' => [
'sql' => [
'driver' => 'daily',
'path' => storage_path('logs/sql.log'),
'level' => 'debug',
'days' => 14,
],
CODE
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,
]);
});
}
}
PHP
방법 2. laravel-sql-logger 패키지 사용
https://github.com/mnabialek/laravel-sql-logger 를 설치하여 SQL logging.
패키지 설치
composer require mnabialek/laravel-sql-logger
CODE
config/app.php 의 providers 등록
Mnabialek\LaravelSqlLogger\Providers\ServiceProvider::class,
CODE
publishing
php artisan vendor:publish --provider="Mnabialek\LaravelSqlLogger\Providers\ServiceProvider"
CODE
- 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
CODE
Ref