美文网首页
Laravel5.2 实时记录sql语句log

Laravel5.2 实时记录sql语句log

作者: 一阵风fly | 来源:发表于2017-01-19 11:26 被阅读162次

Laravel version: 5.2

创建监听器

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

生成文件于 app/Listeners/QueryListener.php

注册事件

打开 app/Providers/EventServiceProvider.php,在 $listen 中添加 illuminate.query 事件的监听器为 QueryListener

protected $listen = [
    \Illuminate\Database\Events\QueryExecuted::class => [
        QueryListener::class
    ],
];

添加逻辑

编辑刚才生成的 QueryListener .php 文件

<?php

namespace App\Listeners;

use Log;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Events\QueryExecuted;

class QueryListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        $this->log = new Logger('sql');
        $this->log->pushHandler(
            new StreamHandler(
                storage_path('logs/sql.log'), 
                Logger::INFO
            )
        );
    }

    /**
     * Handle the event.
     *
     * @param  QueryExecuted  $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);
            $this->log->addInfo($log);
        }
    }
}

这样所有的sql语句都会记录在 storage/logs/sql.log 文件里,结果如下

[2017-01-20 14:43:57] sql.INFO: update `user_login_count` set `register_user_num` = '5' where `id` = '182' [] []

参考文章

相关文章

网友评论

      本文标题:Laravel5.2 实时记录sql语句log

      本文链接:https://www.haomeiwen.com/subject/zycibttx.html