""" backend/utils/logger.py ======================== Loguru-based logging configuration for the entire application. """ import io import sys from loguru import logger as _logger # Re-wrap stdout with UTF-8 so emoji in log messages don't crash on Windows cp1252 _stdout_utf8 = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace", line_buffering=True) # Console handler — coloured, human-readable _logger.add( _stdout_utf8, format=( "{time:YYYY-MM-DD HH:mm:ss} | " "{level: <8} | " "{name}:{function}:{line} — " "{message}" ), level="DEBUG", colorize=False, # disable ANSI colours when redirecting to UTF-8 wrapper ) # File handler — rotating log file _logger.add( "logs/app.log", rotation="10 MB", retention="7 days", compression="zip", format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} — {message}", level="INFO", enqueue=True, ) def get_logger(name: str): """Return a bound logger for a specific module.""" return _logger.bind(name=name)