23 lines
750 B
Python
23 lines
750 B
Python
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")
|