"""Logging configuration for the application.""" import logging import logging.handlers import os from datetime import datetime def setup_logging( log_dir: str = "logs", log_level: int = logging.INFO ) -> None: """ Configure application-wide logging. Args: log_dir: Directory to store log files log_level: Logging level to use """ # Create logs directory os.makedirs(log_dir, exist_ok=True) # Create formatters file_formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) console_formatter = logging.Formatter( '%(levelname)s: %(message)s' ) # Setup file handler with rotation log_file = os.path.join( log_dir, f"leaderboard_{datetime.now().strftime('%Y%m%d')}.log" ) file_handler = logging.handlers.RotatingFileHandler( log_file, maxBytes=10485760, # 10MB backupCount=5 ) file_handler.setFormatter(file_formatter) # Setup console handler console_handler = logging.StreamHandler() console_handler.setFormatter(console_formatter) # Setup root logger root_logger = logging.getLogger() root_logger.setLevel(log_level) root_logger.addHandler(file_handler) root_logger.addHandler(console_handler) # Create separate loggers for different components loggers = { 'evaluation': logging.getLogger('evaluation'), 'queue': logging.getLogger('queue'), 'web': logging.getLogger('web'), 'security': logging.getLogger('security') } # Configure component loggers for name, logger in loggers.items(): logger.setLevel(log_level) # Create component-specific file handler component_log = os.path.join(log_dir, f"{name}.log") handler = logging.handlers.RotatingFileHandler( component_log, maxBytes=5242880, # 5MB backupCount=3 ) handler.setFormatter(file_formatter) logger.addHandler(handler)