From ef9edcf5885a009917b31c4975011b960868dafe Mon Sep 17 00:00:00 2001 From: khaylebfortune <111098422+khaylebfortune@users.noreply.github.com> Date: Mon, 27 Jul 2026 08:19:14 +0000 Subject: [PATCH] fix(middleware): use parametrised route pattern in request completion logger (#668) Replace req.path with req.baseUrl + req.route.path in the request completion logger so log entries contain the parametrised Express route pattern (e.g. /api/v1/creators/:id) instead of the raw URL path with high-cardinality identifiers. Falls back to req.baseUrl + req.path when no route matches (404s). --- .../request-completion-logger.middleware.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/middlewares/request-completion-logger.middleware.ts b/src/middlewares/request-completion-logger.middleware.ts index a12b476..d63089d 100644 --- a/src/middlewares/request-completion-logger.middleware.ts +++ b/src/middlewares/request-completion-logger.middleware.ts @@ -6,10 +6,14 @@ import { logger } from '../utils/logger.utils'; // Emits a structured log with: // - request_id // - method -// - path +// - route (parametrised, e.g. /api/v1/creators/:id) // - status_code // - response_time_ms // +// The route field uses the matched Express route pattern (req.route.path) +// so log keys are low-cardinality. Falls back to the raw path when no +// route matches (e.g. 404s). +// // Log level rules: // - error for 5xx responses // - warn when response time exceeds 1000ms @@ -33,13 +37,19 @@ export const requestCompletionLoggerMiddleware = ( const responseTimeMs = diff[0] * 1e3 + diff[1] * 1e-6; const statusCode = res.statusCode; - const path = req.path; const method = req.method; + // Use the parametrised Express route pattern when available to avoid + // high-cardinality log keys. Falls back to req.path for unmatched + // routes (e.g. 404s). + const route = req.route + ? req.baseUrl + req.route.path + : req.baseUrl + req.path; + const payload = { request_id: requestId, method, - path, + route, status_code: statusCode, response_time_ms: Math.round(responseTimeMs), };