import json import logging from urllib.parse import urlsplit, urlunsplit def redact_url(url: str) -> str: parts = urlsplit(url) host = parts.hostname or "" if ":" in host and not host.startswith("["): host = f"[{host}]" if parts.port is not None: host = f"{host}:{parts.port}" return urlunsplit((parts.scheme, host, parts.path, "", "")) def log_event(logger: logging.Logger, event: str, **fields: object) -> None: safe = {key: redact_url(str(value)) if key == "url" else value for key, value in fields.items()} logger.info(json.dumps({"event": event, **safe}, default=str, sort_keys=True)) def configure_logging(level: str) -> None: logging.basicConfig(level=level.upper(), format="%(message)s")