"""Structured logging setup using loguru."""
import sys
from loguru import logger
from app.config import settings
def setup_logging() -> None:
"""Configure loguru with structured format and appropriate log level.
Removes default handlers and adds a new stderr handler with
the configured log level and structured format.
"""
logger.remove()
log_format = (
"{time:YYYY-MM-DD HH:mm:ss.SSS} | "
"{level: <8} | "
"{name}:{function}:{line} | "
"{message}"
)
logger.add(
sys.stderr,
format=log_format,
level=settings.log_level.upper(),
colorize=True,
backtrace=True,
diagnose=False,
)
logger.add(
"logs/app.log",
format=log_format,
level="DEBUG",
rotation="10 MB",
retention="7 days",
compression="zip",
backtrace=True,
diagnose=False,
)
logger.info("Logging configured at level: {}", settings.log_level)
def get_logger(name: str = __name__) -> logger.__class__:
"""Return a contextualized logger with the given name.
Args:
name: The logger context name, typically __name__.
Returns:
A loguru logger instance bound with the context name.
"""
return logger.bind(context=name)