File size: 1,024 Bytes
7c48757 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | """
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
|