lukehinds's picture
Logging and other improvements
dbdbe46
raw
history blame
2.07 kB
"""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)