Spaces:
Sleeping
Sleeping
File size: 1,234 Bytes
8cdd5f1 | 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 35 36 37 38 39 40 41 42 43 44 45 | 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
|