2017-05-31 47 views
2

如果任何登錄用戶訪問任何服務,那麼我想跟蹤此用戶運行的所有查詢。如何跟蹤laravel 5中的每個用戶數據庫交互?

例子:

如果user1的日誌,並希望刪除他的個人資料信息和user2要更新他的個人資料信息,然後我想在表中的數據,如低於

user | user_id | service  | query 
user1 |  1  | deleteProfile | "DELETE FROM Users WHERE id=1" 
user2 |  2  | updateProfile | "UPDATE Users SET lastname='Thaper' WHERE id=2" 

爲此,我嘗試使用活動日誌,如antonioribeiro/trackerlaravel-activitylog等,但它與我的要求不符。

如何在Laravel 5.2中執行此操作?

回答

3

你可以做到這一點使用中間件:

use DB; 

class DatabaseLogger { 

    public function handle($request, $next) { 
      DB::connection()->enableQueryLog(); 
      return $next($request); 
    } 

    public function terminate($request, $response) { 
     $queries = DB::getQueryLog(); 
     $id = Auth::check()?Auth::id():null; 
     collect($queries)->each(function ($query) use ($id) { 
       DB::table("querylogtable")->insert(["user_id"=>$id,"query"=>$query]); 
     }); 
    } 

} 

加入這個中間件在Kernel.php

protected $middleware = [ 
    CheckForMaintenanceMode::class, 
    DatabaseLogger::class   
]; 

注意保持所有查詢內存可以徵稅,如果有大量查詢正在做。

https://laravel.com/docs/5.0/database#query-logging

更多信息作爲一種替代你可以註冊一個服務提供商如下:

DB::listen(function ($query) { 
     //code to log the query 
    }); 

但是提防記錄查詢也將觸發該事件導致無限遞歸記錄,以便如果你走這條路線,一定不要記錄日誌事件。

有關更多信息:https://laravel.com/docs/5.2/database#running-queries

+0

thanks apokryfos –

相關問題