import logging import os from pathlib import Path from logging.handlers import RotatingFileHandler _LOGGER = None def get_log_file() -> Path: try: tmp = Path(os.getenv("TEMP") or os.getenv("TMP") or ".") except Exception: tmp = Path(".") return tmp / "docx_creator.log" def get_logger(name: str = "docx_creator") -> logging.Logger: global _LOGGER if _LOGGER is not None: return _LOGGER logger = logging.getLogger(name) logger.setLevel(logging.DEBUG) log_file = get_log_file() log_file.parent.mkdir(parents=True, exist_ok=True) handler = RotatingFileHandler(str(log_file), maxBytes=2 * 1024 * 1024, backupCount=2, encoding="utf-8") fmt = logging.Formatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s") handler.setFormatter(fmt) logger.addHandler(handler) # also log warnings+ to stderr for debugging stream = logging.StreamHandler() stream.setLevel(logging.WARNING) stream.setFormatter(fmt) logger.addHandler(stream) _LOGGER = logger logger.info("Logger initialized at %s", log_file) return logger