[Chore-1147] Merge redirect logging into request completion

Story 1147Epic None5 files · +106/−105

PR #306 · pramaan-io/pramaan-functions · merged 2026-06-11

Why this matters

One request, two loggers — and the redirect walks past the audit trail with sensitive values intact.

Why redirect logging must merge into the request-completion middleware.

Two notebooks, one story — no guarantee both write the same line.

The fix — One logger, one redaction pass, one audit trail.

How it flows

sequenceDiagram
  autonumber
  participant client as Request
  participant mw as RequestCompletionLogMiddleware
  participant resp as Response
  client->>mw: request arrives
  mw->>mw: stamp completion entry
  mw->>mw: is redirect? → branch
  mw->>mw: redact URL + capture redirect fields
  mw->>resp: response

request_logger.py · +77 — new methods

Methodin → outwhat it does
_is_sensitive_query_key(key) → bool
_redact_sensitive_query_values(url) → str | None
_redirect_reason(response) → str | None

What changed, file by file

The request-completion log middleware gains four helpers that detect, redact, and capture redirect-specific fields, absorbing the role of the deleted redirect logger.

new methodsignature
_is_sensitive_query_key(key) → bool
_redact_sensitive_query_values(url) → str | None
_redirect_reason(response) → str | None
_redirect_fields(request, response) → dict[str, Any]

Files changed (5)

File±
src/shared/app_factory.py ★+2 −2
src/shared/observability/redirect_logger.py ★+0 −102
src/shared/observability/request_logger.py ★+77 −1
tests/integration/test_request_completion_log.py+12
tests/unit/shared/test_app_factory.py+15