PHP code example of sl-projects / laravel-request-logger

1. Go to this page and download the library: Download sl-projects/laravel-request-logger library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

sl-projects / laravel-request-logger example snippets


use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Middleware;
use SlProjects\LaravelRequestLogger\app\Http\Middleware\SaveRequestMiddleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withMiddleware(function (Middleware $middleware) {
        // Global middleware (logs all requests)
        $middleware->append(SaveRequestMiddleware::class);
        
        // OR for specific routes only
        $middleware->appendToGroup('web', SaveRequestMiddleware::class);
        
        // OR create an alias for selective use
        $middleware->alias([
            'log.request' => SaveRequestMiddleware::class,
        ]);
    })
    ->create();

use Illuminate\Support\Facades\Schedule;

Schedule::command('save:requests')->everyMinute();

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;
use SlProjects\LaravelRequestLogger\app\Http\Middleware\SaveRequestMiddleware;

class Kernel extends HttpKernel
{
    // Global middleware (logs all requests)
    protected $middleware = [
        // ... other middleware
        SaveRequestMiddleware::class,
    ];
    
    // OR for web routes only
    protected $middlewareGroups = [
        'web' => [
            // ... other middleware
            SaveRequestMiddleware::class,
        ],
    ];
    
    // OR create an alias for selective use
    protected $middlewareAliases = [
        // ... other aliases
        'log.request' => SaveRequestMiddleware::class,
    ];
}

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule): void
    {
        $schedule->command('save:requests')->everyMinute();
    }
}

// Laravel 11+ (routes/web.php)
Route::middleware(['log.request'])->group(function () {
    Route::get('/api/users', [UserController::class, 'index']);
    Route::post('/api/users', [UserController::class, 'store']);
});

// Or for individual routes
Route::get('/dashboard', DashboardController::class)
    ->middleware('log.request');

use SlProjects\LaravelRequestLogger\app\Models\LoggedRequest;

// Get all requests from a specific IP
$requests = LoggedRequest::with(['ipAddress', 'url', 'userAgent'])
    ->whereHas('ipAddress', function ($query) {
        $query->where('ip', '192.168.1.1');
    })
    ->get();

// Get requests by status code
$errors = LoggedRequest::where('status_code', '>=', 400)
    ->where('status_code', '<', 500)
    ->get();

// Get requests by URL pattern
$apiRequests = LoggedRequest::whereHas('url', function ($query) {
    $query->where('url', 'like', '/api/%');
})->get();

// Analyze request patterns
$topUserAgents = LoggedRequest::with('userAgent')
    ->select('user_agent_id', DB::raw('count(*) as total'))
    ->groupBy('user_agent_id')
    ->orderByDesc('total')
    ->limit(10)
    ->get();

// config/request-logger.php
return [
    'cache' => [
        // Cache key for storing requests
        'key' => env('REQUEST_LOGGER_CACHE_KEY', 'logged_requests'),
        
        // Cache TTL in seconds (default: 2 hours)
        'ttl' => env('REQUEST_LOGGER_CACHE_TTL', 7200),
        
        // Lock timeout for cache operations
        'lock_timeout' => env('REQUEST_LOGGER_LOCK_TIMEOUT', 10),
    ],
    
    'processing' => [
        // Batch size for database inserts
        'batch_size' => env('REQUEST_LOGGER_BATCH_SIZE', 100),
        
        // Enable/disable async processing
        'async' => env('REQUEST_LOGGER_ASYNC', true),
    ],
    
    'logging' => [
        // Fields to exclude from logging
        'exclude_fields' => [
            'password',
            'password_confirmation',
            'credit_card',
        ],
        
        // URLs to exclude from logging
        'exclude_urls' => [
            'telescope/*',
            'horizon/*',
            '_debugbar/*',
        ],
    ],
];

use SlProjects\LaravelRequestLogger\app\Jobs\SaveRequestsJob;

class CustomRequestProcessor extends SaveRequestsJob
{
    public function handle(): void
    {
        // Custom processing logic
        parent::handle();
        
        // Additional processing
        $this->notifyAdminOfHighTraffic();
        $this->detectAnomalies();
    }
}

// App\Providers\EventServiceProvider
protected $listen = [
    \SlProjects\LaravelRequestLogger\Events\RequestsProcessed::class => [
        \App\Listeners\AnalyzeRequestPatterns::class,
        \App\Listeners\SendTrafficReport::class,
    ],
];

// Example: Prune records older than 30 days
LoggedRequest::where('created_at', '<', now()->subDays(30))->delete();
bash
php artisan migrate
bash
php artisan vendor:publish --tag=request-logger-config
bash
php artisan save:requests