from __future__ import annotations from pathlib import Path import logging LOG_FORMAT = "[%(asctime)s,%(msecs)03d %(levelname)s %(name)s line %(lineno)d %(process)d] %(message)s" DATE_FORMAT = "%Y-%m-%d %H:%M:%S" def setup_logging( name: str = "LWMTemporal", log_dir: Path | None = None, level: int = logging.INFO, ) -> logging.Logger: """Configure and return a logger using the original package's style.""" logger = logging.getLogger(name) logger.setLevel(level) # Avoid duplicating handlers when called multiple times if logger.hasHandlers(): logger.handlers.clear() formatter = logging.Formatter(LOG_FORMAT, DATE_FORMAT) if log_dir is not None: log_dir = Path(log_dir) log_dir.mkdir(parents=True, exist_ok=True) file_handler = logging.FileHandler(log_dir / f"{name}.log") file_handler.setFormatter(formatter) file_handler.setLevel(level) logger.addHandler(file_handler) stream_handler = logging.StreamHandler() stream_handler.setFormatter(formatter) stream_handler.setLevel(level) logger.addHandler(stream_handler) return logger