""" Logging utilities for the YouTube Notes AI application. Provides structured logging with both file and console output. """ import logging import sys from pathlib import Path from typing import Optional from src.utils.config import settings def setup_logger( name: str, log_file: Optional[str] = None, level: Optional[str] = None ) -> logging.Logger: """ Set up a logger with both file and console handlers. Args: name: Logger name (typically __name__) log_file: Optional custom log file path level: Optional custom log level Returns: Configured logger instance """ # Create logger logger = logging.getLogger(name) # Set level from config or parameter log_level = level or settings.log_level logger.setLevel(getattr(logging, log_level.upper())) # Avoid duplicate handlers if logger.handlers: return logger # Create formatters detailed_formatter = logging.Formatter( fmt="%(asctime)s - %(name)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s", datefmt="%Y-%m-%d %H:%M:%S" ) simple_formatter = logging.Formatter( fmt="%(levelname)s - %(message)s" ) # Console handler (simple format) console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(logging.INFO) console_handler.setFormatter(simple_formatter) logger.addHandler(console_handler) # File handler (detailed format) file_path = log_file or settings.log_file file_handler = logging.FileHandler(file_path, encoding="utf-8") file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(detailed_formatter) logger.addHandler(file_handler) return logger # Default application logger logger = setup_logger("youtube_notes_ai")