rajiv-ramteke's picture
Updated project files
8874434
Raw
History Blame Contribute Delete
1.17 kB
"""
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=(
"<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
"<level>{level: <8}</level> | "
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> β€” "
"<level>{message}</level>"
),
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)