File size: 2,074 Bytes
dbdbe46 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
"""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)
|