"""
logger.py -- Centralized loguru configuration.
Import this module once (in app.py) to activate console + file sinks.
All other modules just do `from loguru import logger` directly.
Log levels by environment (set via ENV variable):
prod → WARNING (console) / INFO (file)
test → DEBUG (console) / DEBUG (file)
dev → INFO (console) / DEBUG (file) [default]
"""
import sys
from pathlib import Path
from loguru import logger
from src.config import ENV
CONSOLE_LEVELS = {"prod": "WARNING", "test": "DEBUG", "dev": "INFO"}
FILE_LEVELS = {"prod": "INFO", "test": "DEBUG", "dev": "DEBUG"}
console_level = CONSOLE_LEVELS.get(ENV, "INFO")
file_level = FILE_LEVELS.get(ENV, "DEBUG")
# Project root = parent of src/
PROJECT_ROOT = Path(__file__).resolve().parent.parent
LOG_DIR = PROJECT_ROOT / "log"
LOG_FILE = LOG_DIR / "var_engine.log"
# Remove default stderr handler
logger.remove()
# Colored console output
logger.add(
sys.stderr,
level=console_level,
colorize=True,
format="{time:HH:mm:ss} | {level: <8} | {name}:{function} - {message}",
)
# Single rotating file
LOG_DIR.mkdir(parents=True, exist_ok=True)
logger.add(
str(LOG_FILE),
level=file_level,
rotation="10 MB",
retention="30 days",
format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}",
)
logger.info(f"Logger initialized | ENV={ENV} | console={console_level} | file={file_level}")