taravel/app/Http/Middleware/ApiLogger.php
2024-11-13 16:26:27 +08:00

50 lines
1.4 KiB
PHP

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpFoundation\Response;
class ApiLogger
{
public function handle(Request $request, Closure $next): Response
{
// Log the incoming request
$this->logRequest($request);
// Process the request
$response = $next($request);
// Log the response
$this->logResponse($request, $response);
return $response;
}
private function logRequest(Request $request): void
{
Log::channel('api')->info('API Request', [
'method' => $request->method(),
'url' => $request->fullUrl(),
'headers' => $request->headers->all(),
'body' => $request->all(),
'ip' => $request->ip(),
'user_id' => $request->user()?->id,
'timestamp' => now()->toIso8601String(),
]);
}
private function logResponse(Request $request, Response $response): void
{
Log::channel('api')->info('API Response', [
'url' => $request->fullUrl(),
'status' => $response->getStatusCode(),
'headers' => $response->headers->all(),
'body' => $response->getContent(),
'duration_ms' => round((microtime(true) - LARAVEL_START) * 1000),
'timestamp' => now()->toIso8601String(),
]);
}
}