import json import logging import sys from datetime import datetime, timezone class JSONFormatter(logging.Formatter): def format(self, record): log_data = { "timestamp": datetime.now(timezone.utc).isoformat(), "level": record.levelname, "logger": record.name, "message": record.getMessage(), } if hasattr(record, "request_id"): log_data["request_id"] = record.request_id if record.exc_info and record.exc_info[0]: log_data["exception"] = self.formatException(record.exc_info) return json.dumps(log_data) def setup_logging(log_level="INFO", log_format="json"): root_logger = logging.getLogger() root_logger.setLevel(getattr(logging, log_level.upper(), logging.INFO)) handler = logging.StreamHandler(sys.stdout) if log_format == "json": handler.setFormatter(JSONFormatter()) else: handler.setFormatter(logging.Formatter( "%(asctime)s [%(levelname)s] %(name)s: %(message)s" )) root_logger.handlers.clear() root_logger.addHandler(handler) # Reduce noisy libraries logging.getLogger("werkzeug").setLevel(logging.WARNING) logging.getLogger("easyocr").setLevel(logging.WARNING)