realtime-transcription / utils /logger_config.py
on1onmangoes's picture
Upload utils/logger_config.py with huggingface_hub
28b9cdd verified
import logging
import sys
import os
LOGS_DIR = "logs"
class ColorFormatter(logging.Formatter):
"""Custom formatter that adds colors to log levels"""
grey = "\x1b[38;20m"
yellow = "\x1b[33;20m"
red = "\x1b[31;20m"
bold_red = "\x1b[31;1m"
blue = "\x1b[34;20m"
green = "\x1b[32;20m"
reset = "\x1b[0m"
format_str = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
FORMATS = {
logging.DEBUG: blue + format_str + reset,
logging.INFO: green + format_str + reset,
logging.WARNING: yellow + format_str + reset,
logging.ERROR: red + format_str + reset,
logging.CRITICAL: bold_red + format_str + reset
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt, datefmt='%Y-%m-%d %H:%M:%S')
return formatter.format(record)
def setup_logging(level=None):
"""Configure logging for the entire application"""
# Get level from environment variable or use default
if level is None:
level_name = os.getenv('LOG_LEVEL', 'INFO')
level = getattr(logging, level_name.upper(), logging.INFO)
# Configure stream handler (console output) with color formatter
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setFormatter(ColorFormatter())
# Configure root logger
root_logger = logging.getLogger()
root_logger.setLevel(level)
# Remove existing handlers
root_logger.handlers = []
root_logger.addHandler(stream_handler)
# Prevent duplicate logging
root_logger.propagate = False
# Optionally configure file handler
os.makedirs(LOGS_DIR, exist_ok=True)
file_handler = logging.FileHandler(os.path.join(LOGS_DIR, 'app.log'))
file_handler.setFormatter(logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
))
root_logger.addHandler(file_handler)
# Get comma-separated list of loggers to suppress from env
suppress_loggers = os.getenv('SUPPRESS_LOGGERS', '').strip()
if suppress_loggers:
for logger_name in suppress_loggers.split(','):
logger_name = logger_name.strip()
if logger_name:
logging.getLogger(logger_name).setLevel(logging.WARNING)
logging.info(f"Logging configured with level: {logging.getLevelName(level)}")