Spaces:
Sleeping
Sleeping
File size: 1,222 Bytes
59ebe66 19de729 59ebe66 19de729 59ebe66 19de729 59ebe66 19de729 59ebe66 19de729 59ebe66 19de729 59ebe66 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | """
logging_setup.py — consistent logging config
"""
from __future__ import annotations
import logging
import os
from datetime import datetime
from pathlib import Path
from typing import Optional
_DEFAULT_FMT = "%(asctime)s [%(levelname)s] %(name)s: %(message)s"
def setup_logging(level: Optional[str] = None, *, to_file: bool = True) -> None:
"""
Initialize root logger once. Level may be 'DEBUG'|'INFO'|'WARNING'|'ERROR'.
Falls back to env LOG_LEVEL or INFO.
Optionally write to logs/YYYY-MM-DD.log.
"""
if getattr(setup_logging, "_configured", False):
return
lvl = (level or os.getenv("LOG_LEVEL") or "INFO").upper()
logging.basicConfig(level=getattr(logging, lvl, logging.INFO), format=_DEFAULT_FMT)
if to_file:
logdir = Path("_out/logs")
logdir.mkdir(parents=True, exist_ok=True)
logfile = logdir / f"{datetime.now().strftime('%Y-%m-%d')}.log"
fh = logging.FileHandler(logfile, encoding="utf-8")
fh.setFormatter(logging.Formatter(_DEFAULT_FMT))
root = logging.getLogger()
root.addHandler(fh)
logging.info(f"File logging → {logfile}")
setup_logging._configured = True # type: ignore[attr-defined] |