import logging import re QUERYLESS_PREFIXES = ("/mcp",) _PATH_ARG = 2 _TOKEN = re.compile(r"(?<=[?&]token=)[^&]+") class ScrubQueryFilter(logging.Filter): def filter(self, record: logging.LogRecord) -> bool: args = record.args if isinstance(args, tuple) and len(args) > _PATH_ARG: path = str(args[_PATH_ARG]) if path.startswith(QUERYLESS_PREFIXES): path = path.partition("?")[0] else: path = _TOKEN.sub("***", path) record.args = (*args[:_PATH_ARG], path, *args[_PATH_ARG + 1 :]) return True def scrub_access_log() -> None: logging.getLogger("uvicorn.access").addFilter(ScrubQueryFilter())