boq-api / core /logging.py
gabcares's picture
Upload 80 files
72fdabd verified
Raw
History Blame Contribute Delete
1.2 kB
import logging
import sys
import json
from typing import Any, Dict
class JSONFormatter(logging.Formatter):
"""
Formatter that outputs JSON strings after parsing the LogRecord.
"""
def format(self, record: logging.LogRecord) -> str:
log_record: Dict[str, Any] = {
"timestamp": self.formatTime(record, self.datefmt),
"level": record.levelname,
"message": record.getMessage(),
"module": record.module,
"funcName": record.funcName,
"lineNo": record.lineno,
}
if record.exc_info:
log_record["exception"] = self.formatException(record.exc_info)
return json.dumps(log_record)
def setup_logging(log_level: str = "INFO"):
"""
Setup structured logging.
"""
root_logger = logging.getLogger()
root_logger.setLevel(log_level)
handler = logging.StreamHandler(sys.stdout)
formatter = JSONFormatter()
handler.setFormatter(formatter)
root_logger.handlers = []
root_logger.addHandler(handler)
logging.getLogger("uvicorn.access").handlers = []
logging.getLogger("uvicorn.access").propagate = True