24 lines
707 B
Python
24 lines
707 B
Python
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())
|