study-notes-api / src /utils /logger.py
ALI7ADEL's picture
Upload 51 files
ed147e2 verified
"""
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")