| """ | |
| Logging configuration for NeuroSAM 3 application. | |
| Provides centralized logging setup with proper formatting and levels. | |
| """ | |
| import logging | |
| import sys | |
| from typing import Optional | |
| from config import LOG_LEVEL, LOG_FORMAT, LOG_FILE | |
| def setup_logger(name: str = "NeuroSAM3", level: Optional[str] = None) -> logging.Logger: | |
| """ | |
| Set up and configure the application logger. | |
| Args: | |
| name: Logger name (default: "NeuroSAM3") | |
| level: Log level (default: from config) | |
| Returns: | |
| Configured logger instance | |
| """ | |
| logger = logging.getLogger(name) | |
| # Avoid adding handlers multiple times | |
| if logger.handlers: | |
| return logger | |
| # Set log level | |
| log_level = level or LOG_LEVEL | |
| logger.setLevel(getattr(logging, log_level.upper(), logging.INFO)) | |
| # Create formatter | |
| formatter = logging.Formatter(LOG_FORMAT) | |
| # Console handler | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setLevel(logging.DEBUG) | |
| console_handler.setFormatter(formatter) | |
| logger.addHandler(console_handler) | |
| # File handler (if configured) | |
| if LOG_FILE: | |
| try: | |
| file_handler = logging.FileHandler(LOG_FILE) | |
| file_handler.setLevel(logging.DEBUG) | |
| file_handler.setFormatter(formatter) | |
| logger.addHandler(file_handler) | |
| except Exception as e: | |
| logger.warning(f"Could not set up file logging: {e}") | |
| return logger | |
| # Create default logger instance | |
| logger = setup_logger() | |