'array', 'request_body' => 'array', 'request_query' => 'array', 'response_status' => 'integer', 'duration_ms' => 'integer', 'user_id' => 'integer', 'tenant_id' => 'integer', 'created_at' => 'datetime', ]; /** * HTTP 메서드별 색상 */ public function getMethodColorAttribute(): string { return match ($this->method) { 'GET' => 'bg-green-100 text-green-800', 'POST' => 'bg-blue-100 text-blue-800', 'PUT', 'PATCH' => 'bg-yellow-100 text-yellow-800', 'DELETE' => 'bg-red-100 text-red-800', default => 'bg-gray-100 text-gray-800', }; } /** * 상태 코드별 색상 */ public function getStatusColorAttribute(): string { return match (true) { $this->response_status >= 500 => 'bg-red-100 text-red-800', $this->response_status >= 400 => 'bg-yellow-100 text-yellow-800', $this->response_status >= 300 => 'bg-blue-100 text-blue-800', $this->response_status >= 200 => 'bg-green-100 text-green-800', default => 'bg-gray-100 text-gray-800', }; } /** * URL에서 경로만 추출 */ public function getPathAttribute(): string { return parse_url($this->url, PHP_URL_PATH) ?? $this->url; } /** * 하루 지난 로그 삭제 */ public static function pruneOldLogs(): int { return static::where('created_at', '<', now()->subDay())->delete(); } }