laravel打印sql日志

直接打印

use Log;
use DB;
DB::connection()->enableQueryLog();
Log::info(DB::getQueryLog());
//print_r($orm->toSql());print_r($orm->getBindings());exit;
\DB::connection()->enableQueryLog();
\Log::info(\DB::getQueryLog());

监听

若要打印完整的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);
    });

或者

\DB::listen(function ($query) {
    $tmp = str_replace('?', '"'.'%s'.'"', $query->sql);
    $qBindings = [];
    foreach ($query->bindings as $key => $value) {
        if (is_numeric($key)) {
            $qBindings[] = $value;
        } else {
            $tmp = str_replace(':'.$key, '"'.$value.'"', $tmp);
        }
    }
    $tmp = vsprintf($tmp, $qBindings);
    $tmp = str_replace("\\", "", $tmp);
    \Log::info(' execution time: '.$query->time.'ms; '.$tmp."\n\n\t");
});

猜你喜欢

转载自blog.csdn.net/weixin_33924770/article/details/86944584