Spaces:
Sleeping
Sleeping
import logging | |
import os | |
from pathlib import Path | |
from logging.handlers import RotatingFileHandler | |
# Module level logger instance | |
_logger = None | |
def setup_logger(log_file='fabric_to_espanso.log'): | |
""" | |
Set up and configure the logger for the application. | |
Args: | |
log_file (str): Name of the log file. Defaults to 'fabric_to_espanso.log'. | |
Returns: | |
logging.Logger: Configured logger object. | |
""" | |
global _logger | |
if _logger is not None: | |
return _logger | |
logger = logging.getLogger('fabric_to_espanso') | |
# Clean up any existing handlers | |
logger.handlers.clear() | |
# Set log level and prevent propagation | |
logger.setLevel(logging.INFO) | |
logger.propagate = False | |
# Get the project root directory (2 levels up from logger.py) | |
project_root = Path(__file__).parent.parent.parent | |
# Create logs directory if it doesn't exist - use absolute path | |
log_dir = project_root / "logs" | |
log_dir.mkdir(exist_ok=True) | |
# Create file handlers with absolute path | |
log_file_path = log_dir / f"{log_file}" | |
file_handler = RotatingFileHandler(log_file_path, maxBytes=1024*1024, backupCount=5) | |
console_handler = logging.StreamHandler() | |
# Set log levels | |
file_handler.setLevel(logging.DEBUG) | |
console_handler.setLevel(logging.DEBUG) | |
# Create formatters and add it to handlers | |
file_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') | |
console_format = logging.Formatter('%(name)s - %(levelname)s - %(message)s') | |
file_handler.setFormatter(file_format) | |
console_handler.setFormatter(console_format) | |
# Add handlers to the logger | |
logger.addHandler(file_handler) | |
logger.addHandler(console_handler) | |
_logger = logger | |
return logger |