""" Logging setup for Fellowship. Call setup_logging() once at startup. All modules use standard logging.getLogger(__name__). Logs are written to logs/{YYYY-MM-DD}.log and to stdout in debug mode. """ import logging import logging.handlers import os from datetime import date def setup_logging() -> None: os.makedirs("logs", exist_ok=True) log_file = f"logs/{date.today().isoformat()}.log" formatter = logging.Formatter( fmt="%(asctime)s [%(levelname)s] %(name)s — %(message)s", datefmt="%Y-%m-%dT%H:%M:%S", ) file_handler = logging.handlers.TimedRotatingFileHandler( log_file, when="midnight", backupCount=30, encoding="utf-8" ) file_handler.setFormatter(formatter) file_handler.setLevel(logging.DEBUG) console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) console_handler.setLevel(logging.DEBUG) root = logging.getLogger() root.setLevel(logging.DEBUG) root.addHandler(file_handler) root.addHandler(console_handler)