lumen 通過事件記錄日志mysql日志 監聽


有時,我們調試需要記錄用戶對數據庫的查詢記錄。mysql 免費版沒有這個功能,但是我們可以通過laravel 監聽事件(event)來達到目的

第一步:通過命令新建文件

php artisan make:listenter SqlQueryListener

 

第二步:編輯 新建的這個文件

<?php

namespace App\Listeners;

use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Support\Facades\Log;
class SqlQueryListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * 記錄SQL查詢日志
     *
     * @param  object $event
     * @return void
     */
    public function handle(QueryExecuted $event)
    {
        try {
            if (env('API_DEBUG') == true) {
                $sql = str_replace("?", "'%s'", $event->sql);
                foreach ($event->bindings as $i => $binding) {
                    if ($binding instanceof DateTime) {
                        $event->bindings[$i] = $binding->format('\'Y-m-d H:i:s\'');
                    } else {
                        if (is_string($binding)) {
                            $event->bindings[$i] = "'$binding'";
                        }
                    }
                }
                $log = vsprintf($sql, $event->bindings);
                $log = $log . '  [ RunTime:' . $event->time . 'ms ] ';
 /*記錄sql查詢信息到日志,記錄日志並自定義位置*/
              Log::useDailyFiles(storage_path('logs/job/error.log'));
              Log::info($log);

} } catch (Exception $exception) { } } }

 

第三步:在providers目錄下EventServiceProvider設置

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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM