如何跟踪laravel 5中的每个用户数据库交互?

问题描述:

如果任何登录用户访问任何服务,那么我想跟踪此用户运行的所有查询。如何跟踪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中执行此操作?

你可以做到这一点使用中间件:

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 –