""" 集中式日志配置模块 提供统一的日志配置和日志器获取接口。 """ import logging import sys from pathlib import Path from typing import Optional # 日志格式配置 LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" DATE_FORMAT = "%Y-%m-%d %H:%M:%S" # 默认日志级别 DEFAULT_LOG_LEVEL = logging.INFO # 日志文件配置(可选) LOG_DIR = Path("logs") LOG_FILE = LOG_DIR / "app.log" def setup_logging( level: int = DEFAULT_LOG_LEVEL, log_to_file: bool = False, log_file: Optional[Path] = None ) -> None: """ 配置全局日志设置 Args: level: 日志级别 log_to_file: 是否输出到文件 log_file: 日志文件路径(如果log_to_file为True) """ # 创建根日志器 root_logger = logging.getLogger() root_logger.setLevel(level) # 清除现有的处理器 root_logger.handlers.clear() # 创建格式化器 formatter = logging.Formatter(LOG_FORMAT, DATE_FORMAT) # 添加控制台处理器 console_handler = logging.StreamHandler(sys.stdout) console_handler.setLevel(level) console_handler.setFormatter(formatter) root_logger.addHandler(console_handler) # 添加文件处理器(如果需要) if log_to_file: file_path = log_file or LOG_FILE # 确保日志目录存在 file_path.parent.mkdir(parents=True, exist_ok=True) file_handler = logging.FileHandler(file_path, encoding="utf-8") file_handler.setLevel(level) file_handler.setFormatter(formatter) root_logger.addHandler(file_handler) def get_logger(name: str) -> logging.Logger: """ 获取命名日志器 Args: name: 日志器名称(通常使用 __name__) Returns: 配置好的日志器实例 Example: >>> logger = get_logger(__name__) >>> logger.info("Application started") """ return logging.getLogger(name) # 在模块导入时自动配置日志 setup_logging()