resolveRequestId($request); $request->attributes->set('observability.request_id', $requestId); Log::withContext(array_filter([ 'request_id' => $requestId, 'organisation_id' => $this->resolveOrganisationId($request), 'user_id' => $request->user()?->getAuthIdentifier(), 'route' => $request->route()?->getName(), ], static fn ($v) => $v !== null && $v !== '')); $response = $next($request); $response->headers->set('X-Request-Id', $requestId); return $response; } private function resolveRequestId(Request $request): string { $supplied = $request->header('X-Request-Id'); if (is_string($supplied) && Str::isUlid($supplied)) { return $supplied; } return (string) Str::ulid(); } private function resolveOrganisationId(Request $request): ?string { $portalEvent = $request->attributes->get('portal_event'); if ($portalEvent instanceof Event) { return $portalEvent->organisation_id; } $route = $request->route(); if ($route === null) { return null; } $org = $route->parameter('organisation'); if ($org instanceof Organisation) { return $org->id; } if (is_string($org) && $org !== '') { return $org; } $event = $route->parameter('event'); if ($event instanceof Event) { return $event->organisation_id; } return null; } }