| """ |
| Logging setup for Module A |
| Configures both console and file logging with rotation |
| """ |
|
|
| import logging |
| import sys |
| from pathlib import Path |
| from logging.handlers import RotatingFileHandler |
|
|
| from .config import ( |
| LOG_LEVEL, |
| LOG_FORMAT, |
| LOG_FILE, |
| LOG_FILE_MAX_BYTES, |
| LOG_FILE_BACKUP_COUNT |
| ) |
|
|
|
|
| def setup_logging(module_name: str = "module_a") -> logging.Logger: |
| """ |
| Set up logging with both console and file handlers |
| |
| Args: |
| module_name: Name of the module (for logger name) |
| |
| Returns: |
| Configured logger instance |
| """ |
| logger = logging.getLogger(module_name) |
| logger.setLevel(getattr(logging, LOG_LEVEL.upper(), logging.INFO)) |
| |
| |
| logger.handlers.clear() |
| |
| |
| formatter = logging.Formatter(LOG_FORMAT) |
| |
| |
| console_handler = logging.StreamHandler(sys.stdout) |
| console_handler.setLevel(getattr(logging, LOG_LEVEL.upper(), logging.INFO)) |
| console_handler.setFormatter(formatter) |
| logger.addHandler(console_handler) |
| |
| |
| if LOG_FILE: |
| try: |
| |
| LOG_FILE.parent.mkdir(parents=True, exist_ok=True) |
| |
| file_handler = RotatingFileHandler( |
| LOG_FILE, |
| maxBytes=LOG_FILE_MAX_BYTES, |
| backupCount=LOG_FILE_BACKUP_COUNT, |
| encoding='utf-8' |
| ) |
| file_handler.setLevel(getattr(logging, LOG_LEVEL.upper(), logging.INFO)) |
| file_handler.setFormatter(formatter) |
| logger.addHandler(file_handler) |
| |
| logger.info(f"Logging to file: {LOG_FILE}") |
| except Exception as e: |
| logger.warning(f"Failed to set up file logging: {e}") |
| |
| return logger |
|
|
|
|
| def get_pinecone_logger() -> logging.Logger: |
| """ |
| Get a logger specifically for Pinecone operations |
| |
| Returns: |
| Logger instance for Pinecone operations |
| """ |
| logger = logging.getLogger("module_a.pinecone") |
| |
| |
| if not logger.handlers: |
| |
| parent_logger = logging.getLogger("module_a") |
| if not parent_logger.handlers: |
| setup_logging("module_a") |
| |
| |
| for handler in logging.getLogger("module_a").handlers: |
| logger.addHandler(handler) |
| |
| logger.setLevel(getattr(logging, LOG_LEVEL.upper(), logging.INFO)) |
| return logger |
|
|