0x01 创建SQL监听器

Laravel 5.1版本:

php artisan make:listener QueryListener --event=illuminate.query  

Laravel 5.2、5.3、5.4版本:

php artisan make:listener QueryListener --event=Illuminate\\Database\\Events\\QueryExecuted   

0x02 注册SQL监听事件

Laravel 5.1版本:

打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 illuminate.query 事件的监听器为 QueryListener
头部引入 use App\Listeners\QueryListener;
protected $listen = [  
        'illuminate.query' => [
            QueryListener::class,
        ],
    ];

Laravel 5.2、5.3、5.4版本:

打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 Illuminate\Database\Events\QueryExecuted 事件的监听器为 QueryListener

protected $listen = [  
        'Illuminate\Database\Events\QueryExecuted' => [
            'App\Listeners\QueryListener',
        ],
    ];

0x03 编写SQL打印逻辑代码
Laravel 5.1版本
编辑app/Listeners/QueryListener.php文件

/**
     * 日志打印方法.
     *
     * @param  illuminate.query  $event
     * @return void
     */
    public function handle($sql, $params)
    {
        // 如果env中属于本地开发则进入该判断
        if (env('APP_ENV', 'production') == 'local') {
            foreach ($params as $index => $param) {
                if ($param instanceof \DateTime) {
                    $params[$index] = $param->format('Y-m-d H:i:s');
                }
            }
            $sql = str_replace("?", "'%s'", $sql);
            array_unshift($params, $sql);
            // dd($params);
            \Log::info('SQL语句输出------------>'.call_user_func_array('sprintf', $params));
        }
    }

Laravel 5.2、5.3、5.4版本

/**
     * 日志打印方法.
     *
     * @param  illuminate.query  $event
     * @return void
     */
    public function handle(QueryExecuted $event)
    {
        if (env('APP_ENV', 'production') == 'local') {
            $sql = str_replace("?", "'%s'", $event->sql);

            $log = vsprintf($sql, $event->bindings);

            Log::info($log);
        }
    }

0x04 查看效果

打开storage/logs/laravel.log可查看到所有的SQL语句

[2017-05-14 00:43:22] local.INFO: select count(*) as aggregate from `data_users` where `status` = '1'  
[2017-05-14 00:43:22] local.INFO: select * from `data_users` where `status` = '1' order by `addtime` desc limit 10 offset 0