"""日志:控制台 + 可选文件输出。""" from __future__ import annotations import logging import sys from pathlib import Path _FORMAT = "[%(asctime)s][%(levelname)s][%(name)s] %(message)s" _DATEFMT = "%Y-%m-%d %H:%M:%S" def setup_logging(log_file: str | Path | None = None, level: int | str = logging.INFO) -> logging.Logger: root = logging.getLogger("mte") root.setLevel(level) root.handlers.clear() root.propagate = False formatter = logging.Formatter(_FORMAT, datefmt=_DATEFMT) stream = logging.StreamHandler(sys.stdout) stream.setFormatter(formatter) root.addHandler(stream) if log_file is not None: path = Path(log_file) path.parent.mkdir(parents=True, exist_ok=True) file_handler = logging.FileHandler(path, encoding="utf-8") file_handler.setFormatter(formatter) root.addHandler(file_handler) return root def get_logger(name: str = "mte") -> logging.Logger: return logging.getLogger(name if name.startswith("mte") else f"mte.{name}")