app/config/logging_config.py (31 lines of code) (raw):
"""(c) 2025, Elastic Co.
Author: Adhish Thite <adhish.thite@elastic.co>
"""
import logging
class ColoredFormatter(logging.Formatter):
"""Custom formatter adding colors to logging levels"""
grey = "\x1b[38;21m"
blue = "\x1b[38;5;39m"
yellow = "\x1b[38;5;226m"
red = "\x1b[38;5;196m"
bold_red = "\x1b[31;1m"
reset = "\x1b[0m"
def __init__(self, fmt):
super().__init__()
self.fmt = fmt
self.FORMATS = {
logging.DEBUG: self.grey + fmt + self.reset,
logging.INFO: self.blue + fmt + self.reset,
logging.WARNING: self.yellow + fmt + self.reset,
logging.ERROR: self.red + fmt + self.reset,
logging.CRITICAL: self.bold_red + fmt + self.reset,
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt)
return formatter.format(record)
def setup_logger(name: str) -> logging.Logger:
"""Set up and return a configured logger instance."""
logger = logging.getLogger(name)
logger.setLevel(logging.INFO)
# Create console handler with custom formatter
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# Create custom format with emojis
log_format = "%(asctime)s 🕒 [%(levelname)s] %(message)s"
ch.setFormatter(ColoredFormatter(log_format))
logger.addHandler(ch)
return logger