"""
Logging configuration.
"""
import logging
import sys
from pathlib import Path
from typing import Optional
from .settings import settings
def setup_logging(level: Optional[str] = None) -> None:
"""
Set up logging configuration.
Args:
level: Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
"""
log_level = level or settings.log_level
# Create logs directory if it doesn't exist
logs_dir = Path("logs")
logs_dir.mkdir(exist_ok=True)
# Configure logging format
log_format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
# Configure handlers
handlers = [
logging.StreamHandler(sys.stdout),
logging.FileHandler(logs_dir / "app.log", encoding="utf-8")
]
# Set up logging
logging.basicConfig(
level=getattr(logging, log_level.upper()),
format=log_format,
handlers=handlers,
force=True
)
# Set specific loggers
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("uvicorn.access").setLevel(logging.INFO)
def get_logger(name: str) -> logging.Logger:
"""
Get a logger instance.
Args:
name: Logger name (usually __name__)
Returns:
Logger instance
"""
return logging.getLogger(name)