from __future__ import annotations from pathlib import Path import json from datetime import datetime class LocalLogger: def __init__(self, log_file: Path): self.log_file = log_file self.log_file.parent.mkdir(parents=True, exist_ok=True) def log(self, stage: str, level: str, message: str, **extra): event = {"timestamp": datetime.utcnow().isoformat()+"Z", "stage": stage, "level": level, "message": message, **extra} with self.log_file.open("a", encoding="utf-8") as f: f.write(json.dumps(event, ensure_ascii=False) + "\n")