Laravel 5 SQL語句列印日誌
阿新 • • 發佈:2018-11-13
Laravel 5 用DB自帶的方式列印SQL語句:
DB::enableQueryLog();
DB::getQueryLog();
得到的結果語句和引數是分開的,非常不利於驗證。
[
0 => array:3 [▼
"query" => "select * from `mall_users` where `mall_users`.`id` = ? limit 1"
"bindings" => array:1 [▼
0 => 1
]
"time" => 11.87
]
]
若要列印完整的SQL語句日誌可在app/providers/AppServicesProviders.php檔案的boot方法編寫如下程式碼:
DB::listen( function ($sql) { foreach ($sql->bindings as $i => $binding) { if ($binding instanceof \DateTime) { $sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\''); } else { if (is_string($binding)) { $sql->bindings[$i] = "'$binding'"; } } } // Insert bindings into query $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql); $query = vsprintf($query, $sql->bindings); // Save the query to file $logFile = fopen( storage_path('logs' . DIRECTORY_SEPARATOR . date('Y-m-d') . '_query.log'), 'a+' ); fwrite($logFile, date('Y-m-d H:i:s') . ': ' . $query . PHP_EOL); fclose($logFile); } );
日誌在storage/log/xxx_query.log檔案中。