Spaces:
Sleeping
Sleeping
| import logging | |
| import json | |
| import sys | |
| from datetime import datetime, timezone | |
| class JsonFormatter(logging.Formatter): | |
| """ | |
| Outputs JSON-formatted logs suitable for Docker, Elastic, Loki, etc. | |
| """ | |
| def format(self, record): | |
| log_record = { | |
| "timestamp": datetime.now(timezone.utc).isoformat(), | |
| "level": record.levelname, | |
| "logger": record.name, | |
| "message": record.getMessage(), | |
| "module": record.module, | |
| "funcName": record.funcName, | |
| "lineNo": record.lineno, | |
| } | |
| if hasattr(record, "props"): | |
| log_record.update(record.props) | |
| if record.exc_info: | |
| log_record["exception"] = self.formatException(record.exc_info) | |
| return json.dumps(log_record) | |
| def get_logger(name: str) -> logging.Logger: | |
| logger = logging.getLogger(name) | |
| # Prevent duplicate handlers in Docker/Gunicorn/etc. | |
| if not logger.hasHandlers(): | |
| handler = logging.StreamHandler(sys.stdout) | |
| handler.setFormatter(JsonFormatter()) | |
| handler.setLevel(logging.INFO) | |
| logger.addHandler(handler) | |
| logger.setLevel(logging.INFO) | |
| logger.propagate = False | |
| return logger | |