Если какой-либо вошедший в систему пользователь получает доступ к какой-либо службе, то я хочу отслеживать все запросы, выполняемые этим пользователем.
Пример:
Если пользователь 1 входит в систему и хочет удалить данные своего профиля, а пользователь 2 хочет обновить данные своего профиля, то я хочу получить данные в таблице, как показано ниже.
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 / трекер а также Laravel-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
Других решений пока нет …