"""
Centralized logging configuration for the application.
This module configures loguru logger with appropriate settings for
development and production environments.
"""
import sys
from pathlib import Path
from loguru import logger
def setup_logger(
level: str = "INFO", log_file: bool = False, log_dir: str = "logs"
) -> None:
"""
Configure the application logger.
Args:
level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
log_file: Whether to write logs to file
log_dir: Directory for log files
"""
# Remove default handler
logger.remove()
# Console handler with custom format
logger.add(
sys.stderr,
format=(
"{time:YYYY-MM-DD HH:mm:ss} | "
"{level: <8} | "
"{name}:{function}:{line} | "
"{message}"
),
level=level,
colorize=True,
)
# File handler (optional)
if log_file:
log_path = Path(log_dir)
log_path.mkdir(exist_ok=True)
logger.add(
log_path / "app_{time:YYYY-MM-DD}.log",
rotation="00:00", # Rotate at midnight
retention="7 days", # Keep logs for 7 days
compression="zip", # Compress old logs
level=level,
format=(
"{time:YYYY-MM-DD HH:mm:ss} | "
"{level: <8} | "
"{name}:{function}:{line} | "
"{message}"
),
)
logger.info(f"Logger initialized with level: {level}")
def get_logger(name: str):
"""
Get a logger instance with the given name.
Args:
name: Logger name (typically __name__ of the module)
Returns:
Logger instance
"""
return logger.bind(name=name)