記錄 sql 查詢日誌

xufu發表於2017-07-19

laravel 預設是不記錄查詢日誌的,為了開發過程中 檢視執行的sql日誌,可以採用以下方式

### 事件監聽 

  1.  在 app/Providers/EventServicePorvider.php 檔案中 新增要註冊的事件

    protected $listen = [
        'App\Events\Event' => [
            'App\Listeners\EventListener',
        ],
        'Illuminate\Database\Events\QueryExecuted' => [
            'App\Listeners\QueryListener',
        ],
        'Illuminate\Auth\Events\Login' => [
            'App\Listeners\LogSuccessfulLogin',
        ],
    
    ];

    2 進入cmd ,切換 專案根目錄裡,執行 命令

    php artisan event:generate

    3 . 編寫 剛建立好的 QueryListener.php 程式碼如下

class QueryListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  illuminate.query  $event
     * @return void
     */
    public function handle(QueryExecuted $event)
    {
        if($event->sql){
                    // 把sql  的日誌獨立分開
            $fileName = storage_path('logs/sql/'.date('Y-m-d').'.log'); 
            Log::useFiles($fileName,'info');
            $sql = str_replace("?", "'%s'", $event->sql);
            $log = vsprintf($sql, $event->bindings);
            Log::info($log);
        }

    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章