travel-recommender-api / src /api /logging_utils.py
dcorcoran's picture
Removed bm25 csv
8cdd5f1
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