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() |