|
"""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 |
|
""" |
|
|
|
os.makedirs(log_dir, exist_ok=True) |
|
|
|
|
|
file_formatter = logging.Formatter( |
|
'%(asctime)s - %(name)s - %(levelname)s - %(message)s' |
|
) |
|
console_formatter = logging.Formatter( |
|
'%(levelname)s: %(message)s' |
|
) |
|
|
|
|
|
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, |
|
backupCount=5 |
|
) |
|
file_handler.setFormatter(file_formatter) |
|
|
|
|
|
console_handler = logging.StreamHandler() |
|
console_handler.setFormatter(console_formatter) |
|
|
|
|
|
root_logger = logging.getLogger() |
|
root_logger.setLevel(log_level) |
|
root_logger.addHandler(file_handler) |
|
root_logger.addHandler(console_handler) |
|
|
|
|
|
loggers = { |
|
'evaluation': logging.getLogger('evaluation'), |
|
'queue': logging.getLogger('queue'), |
|
'web': logging.getLogger('web'), |
|
'security': logging.getLogger('security') |
|
} |
|
|
|
|
|
for name, logger in loggers.items(): |
|
logger.setLevel(log_level) |
|
|
|
|
|
component_log = os.path.join(log_dir, f"{name}.log") |
|
handler = logging.handlers.RotatingFileHandler( |
|
component_log, |
|
maxBytes=5242880, |
|
backupCount=3 |
|
) |
|
handler.setFormatter(file_formatter) |
|
logger.addHandler(handler) |
|
|