File size: 1,908 Bytes
61d360d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import logging
from logging.handlers import RotatingFileHandler
import sys

# Create logs directory if it doesn't exist
logs_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')
os.makedirs(logs_dir, exist_ok=True)

# Log file path
log_file_path = os.path.join(logs_dir, 'deblur_app.log')

# Keep track of configured loggers to prevent duplicate setup
_configured_loggers = set()

def setup_logger(name=None):
    """
    Setup and return a logger configured to log to both file and console
    
    Args:
        name: Logger name (default: root logger)
        
    Returns:
        Configured logger instance
    """
    global _configured_loggers
    
    # Get or create the logger
    logger = logging.getLogger(name)
    
    # Check if this logger has already been configured
    logger_id = id(logger)
    if logger_id in _configured_loggers or logger.handlers:
        return logger
    
    # Add to configured loggers set
    _configured_loggers.add(logger_id)
    
    # Set log level
    logger.setLevel(logging.INFO)
    
    # Prevent propagation to avoid duplicate logs
    logger.propagate = False
    
    # Create formatter
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
    # File handler (with rotation)
    file_handler = RotatingFileHandler(
        log_file_path, 
        maxBytes=10*1024*1024,  # 10 MB
        backupCount=5
    )
    file_handler.setLevel(logging.INFO)
    file_handler.setFormatter(formatter)
    
    # Console handler
    console_handler = logging.StreamHandler(sys.stdout)
    console_handler.setLevel(logging.INFO)
    console_handler.setFormatter(formatter)
    
    # Add handlers to logger
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    
    return logger

# Configure root logger only once
if not logging.getLogger().handlers:
    setup_logger()