| import os |
| import logging |
| from logging.handlers import RotatingFileHandler |
| import sys |
|
|
| |
| logs_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs') |
| os.makedirs(logs_dir, exist_ok=True) |
|
|
| |
| log_file_path = os.path.join(logs_dir, 'deblur_app.log') |
|
|
| |
| _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 |
| |
| |
| logger = logging.getLogger(name) |
| |
| |
| logger_id = id(logger) |
| if logger_id in _configured_loggers or logger.handlers: |
| return logger |
| |
| |
| _configured_loggers.add(logger_id) |
| |
| |
| logger.setLevel(logging.INFO) |
| |
| |
| logger.propagate = False |
| |
| |
| formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') |
| |
| |
| file_handler = RotatingFileHandler( |
| log_file_path, |
| maxBytes=10*1024*1024, |
| backupCount=5 |
| ) |
| file_handler.setLevel(logging.INFO) |
| file_handler.setFormatter(formatter) |
| |
| |
| console_handler = logging.StreamHandler(sys.stdout) |
| console_handler.setLevel(logging.INFO) |
| console_handler.setFormatter(formatter) |
| |
| |
| logger.addHandler(file_handler) |
| logger.addHandler(console_handler) |
| |
| return logger |
|
|
| |
| if not logging.getLogger().handlers: |
| setup_logger() |