| """ | |
| Custom structured JSON logging for filter outputs. | |
| """ | |
| import json | |
| import logging | |
| import sys | |
| from datetime import datetime | |
| from typing import Any, Dict | |
| class JsonFormatter(logging.Formatter): | |
| def format(self, record: logging.LogRecord) -> str: | |
| log_obj: Dict[str, Any] = { | |
| "timestamp": datetime.utcnow().isoformat() + "Z", | |
| "level": record.levelname, | |
| "message": record.getMessage(), | |
| "module": record.module | |
| } | |
| if hasattr(record, 'metrics'): | |
| log_obj["metrics"] = record.metrics | |
| return json.dumps(log_obj) | |
| def get_structured_logger(name: str) -> logging.Logger: | |
| """Instantiates a logger that outputs JSON structured text.""" | |
| logger = logging.getLogger(name) | |
| logger.setLevel(logging.INFO) | |
| if not logger.handlers: | |
| handler = logging.StreamHandler(sys.stdout) | |
| handler.setFormatter(JsonFormatter()) | |
| logger.addHandler(handler) | |
| return logger | |