MegrurNiftiyev's picture
Upload folder using huggingface_hub
215f97f verified
Raw History Blame Contribute Delete
1.29 kB
"""
Structured logging configuration.
"""
import logging
import sys
import json
from datetime import datetime, timezone
class JSONFormatter(logging.Formatter):
"""Emit log records as single-line JSON objects."""
def format(self, record: logging.LogRecord) -> str:
log_entry = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"level": record.levelname,
"logger": record.name,
"message": record.getMessage(),
}
if record.exc_info and record.exc_info[0] is not None:
log_entry["exception"] = self.formatException(record.exc_info)
return json.dumps(log_entry)
def setup_logging(level: int = logging.INFO) -> None:
"""Configure root logger with structured JSON output to stderr."""
handler = logging.StreamHandler(sys.stderr)
handler.setFormatter(JSONFormatter())
root = logging.getLogger()
root.setLevel(level)
root.addHandler(handler)
# Quieten noisy third-party loggers
logging.getLogger("uvicorn.access").setLevel(logging.WARNING)
logging.getLogger("motor").setLevel(logging.WARNING)
def get_logger(name: str) -> logging.Logger:
"""Return a named logger."""
return logging.getLogger(name)