File size: 2,191 Bytes
1f725d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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}")