summaryrefslogtreecommitdiff
path: root/app/Http/Middleware/Logger.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Http/Middleware/Logger.php')
-rw-r--r--app/Http/Middleware/Logger.php33
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;
}