trumpoikot
Enthusiast
can you show me how to create user activity logs using laravel?
composer create-project --prefer-dist laravel/laravel user-activity-logs
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=user_activity_logs
DB_USERNAME=root
DB_PASSWORD=
php artisan make:migration create_user_activity_logs_table
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUserActivityLogsTable extends Migration
{
public function up()
{
Schema::create('user_activity_logs', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->string('activity');
$table->text('details')->nullable();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
public function down()
{
Schema::dropIfExists('user_activity_logs');
}
}
php artisan migrate
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class LogUserActivity
{
public function handle($request, Closure $next)
{
$response = $next($request);
if (Auth::check()) {
$user = Auth::user();
$activity = $request->route()->getActionName();
Log::channel('user_activity')->info($user->name . ' has accessed ' . $activity);
}
return $response;
}
}
'log.user.activity' => \App\Http\Middleware\LogUserActivity::class,
Route::group(['middleware' => ['auth', 'log.user.activity']], function () {
// your routes here
});
'user_activity' => [
'driver' => 'daily',
'path' => storage_path('logs/user_activity.log'),
'level' => 'info',
'days' => 7,
],