diff options
Diffstat (limited to 'app/Http/Middleware/Logger.php')
| -rw-r--r-- | app/Http/Middleware/Logger.php | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/app/Http/Middleware/Logger.php b/app/Http/Middleware/Logger.php index ef707f4..17c2f18 100644 --- a/app/Http/Middleware/Logger.php +++ b/app/Http/Middleware/Logger.php @@ -6,6 +6,7 @@ use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; use Illuminate\Support\Facades\Log; +use App\Models\VisitorLog; class Logger { @@ -18,17 +19,45 @@ class Logger { $response = $next($request); + $statusCode = $response->getStatusCode(); + $logMessage = sprintf( "[%s] IP: %s | Method: %s | Route: %s | Status: %s | Agent: %s", now()->format('Y-m-d H:i:s'), $request->ip(), $request->method(), $request->path(), - $response->getStatusCode(), + $statusCode, $request->header('User-Agent') ); - Log::channel('requests')->info($logMessage); + try { + Log::channel('requests')->info($logMessage); + } catch (\Exception $e) { + // Log channel unavailable (e.g. permission error in test environment) + } + + // Update visitor log in database + $statusColumn = match ($statusCode) { + 200 => 'status_200_count', + 404 => 'status_404_count', + 405 => 'status_405_count', + 500 => 'status_500_count', + default => null, + }; + + $visitor = VisitorLog::firstOrCreate( + ['ip_address' => $request->ip()], + ['first_seen_at' => now(), 'total_requests' => 0] + ); + + $visitor->increment('total_requests'); + + if ($statusColumn) { + $visitor->increment($statusColumn); + } + + $visitor->update(['last_seen_at' => now()]); return $response; } |
