Spaces:
Sleeping
Sleeping
| import logging | |
| import os | |
| from logging.handlers import RotatingFileHandler | |
| from datetime import datetime | |
| from constants import LOGS_DIR | |
| # Log File Configuration | |
| LOG_FILE = f"{datetime.now().strftime('%m_%d_%Y_%H_%M_%S')}.log" | |
| MAX_FOLDER_SIZE = 2 * 1024 * 1024 # 2MB | |
| MAX_LOG_SIZE = 5 * 1024 * 1024 # This is still needed for RotatingFileHandler if a single run exceeds 5MB | |
| log_file_path = os.path.join(LOGS_DIR, LOG_FILE) | |
| def cleanup_logs(): | |
| """Removes oldest log files if the total folder size exceeds MAX_FOLDER_SIZE.""" | |
| if not os.path.exists(LOGS_DIR): | |
| return | |
| files = [os.path.join(LOGS_DIR, f) for f in os.listdir(LOGS_DIR) if f.endswith(".log")] | |
| files.sort(key=os.path.getmtime) # Sort by modification time (oldest first) | |
| total_size = sum(os.path.getsize(f) for f in files) | |
| while total_size > MAX_FOLDER_SIZE and files: | |
| oldest_file = files.pop(0) | |
| file_size = os.path.getsize(oldest_file) | |
| try: | |
| os.remove(oldest_file) | |
| total_size -= file_size | |
| logging.info(f"Deleted old log file: {oldest_file}") | |
| except Exception as e: | |
| logging.error(f"Error deleting old log file {oldest_file}: {e}") | |
| break | |
| def configure_logger(): | |
| # Ensure logs directory exists | |
| os.makedirs(LOGS_DIR, exist_ok=True) | |
| # Run cleanup before creating new log | |
| cleanup_logs() | |
| logger = logging.getLogger() | |
| logger.setLevel(logging.DEBUG) | |
| formatter = logging.Formatter("[ %(asctime)s ] %(name)s - %(levelname)s - %(message)s") | |
| # File Handler | |
| file_handler = RotatingFileHandler(log_file_path, maxBytes=MAX_LOG_SIZE, backupCount=3) | |
| file_handler.setFormatter(formatter) | |
| file_handler.setLevel(logging.DEBUG) | |
| # Console Handler | |
| console_handler = logging.StreamHandler() | |
| console_handler.setFormatter(formatter) | |
| console_handler.setLevel(logging.INFO) | |
| # Avoid duplicate handlers if the logger is re-initialized | |
| logger.handlers.clear() | |
| logger.addHandler(file_handler) | |
| logger.addHandler(console_handler) | |
| # Automatically configure on import | |
| configure_logger() | |
| logging.info(f"Logger initialized. Logging to {log_file_path}") |