| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -7,13 +7,15 @@ from datetime import datetime | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					class BRepLogger: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    _instance = None | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def __new__(cls): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def __new__(cls, log_level=logging.INFO, console_level=logging.INFO,  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                file_level=logging.DEBUG, include_trace=True): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if cls._instance is None: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            cls._instance = super().__new__(cls) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            cls._instance._initialize_logger() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            cls._instance._initialize_logger(log_level, console_level,  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                                          file_level, include_trace) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return cls._instance | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def _initialize_logger(self): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def _initialize_logger(self, log_level, console_level, file_level, include_trace): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        """初始化日志记录器""" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 创建logs目录 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        log_dir = 'logs' | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -21,45 +23,51 @@ class BRepLogger: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 创建logger | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger = logging.getLogger('BRepLogger') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.setLevel(logging.DEBUG) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.setLevel(log_level) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 如果logger已经有处理器,则返回 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if self.logger.handlers: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            return | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					             | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 创建格式化器 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        formatter = logging.Formatter( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        simple_formatter = logging.Formatter('%(levelname)s - %(message)s') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        detailed_formatter = logging.Formatter( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            '%(asctime)s - %(levelname)s - ' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            '%(filename)s:%(lineno)d in %(funcName)s - %(message)s' | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 创建文件处理器 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 创建文件处理器 (详细日志) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        current_time = datetime.now().strftime('%Y%m%d_%H%M%S') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        log_file = os.path.join(log_dir, f'brep2sdf_{current_time}.log') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        file_handler = logging.FileHandler(log_file, encoding='utf-8') | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        file_handler.setLevel(logging.DEBUG) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        file_handler.setFormatter(formatter) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        file_handler.setLevel(file_level) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        file_handler.setFormatter(detailed_formatter) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 创建控制台处理器 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 创建控制台处理器 (简略日志) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console_handler = logging.StreamHandler(sys.stdout) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console_handler.setLevel(logging.DEBUG) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console_handler.setFormatter(formatter) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console_handler.setLevel(console_level) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        console_handler.setFormatter(simple_formatter) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 添加处理器 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.addHandler(file_handler) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.addHandler(console_handler) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 保存配置 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.include_trace = include_trace | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					         | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        # 记录初始信息 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.info("="*50) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.info("BRep Logger initialized") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.info(f"Log file: {log_file}") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.info("="*50) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if file_level <= logging.DEBUG: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            self.logger.debug(f"Log file: {log_file}") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def debug(self, msg): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        """带调用位置的调试信息""" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        """调试信息""" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if self.include_trace: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            caller = traceback.extract_stack()[-2] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            filename = os.path.basename(caller.filename) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            self.logger.debug(f"{msg} (in {filename})") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            self.logger.debug(msg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def info(self, msg): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.info(msg) | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -67,16 +75,32 @@ class BRepLogger: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def warning(self, msg): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.warning(msg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def error(self, msg, include_trace=True): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        """错误信息,可选是否包含调用栈""" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def error(self, msg, include_trace=None): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        """错误信息""" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        include_trace = self.include_trace if include_trace is None else include_trace | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if include_trace: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            self.logger.error(msg, exc_info=True, stack_info=True) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        else: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            self.logger.error(msg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def exception(self, msg): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        """异常信息,总是包含异常堆栈""" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        """异常信息""" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.logger.exception(msg) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# 创建全局logger实例 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					logger = BRepLogger() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					def setup_logger(name='BRepLogger', log_level='INFO', console_level='INFO',  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                file_level='DEBUG', include_trace=True): | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    """创建logger的便捷函数""" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    # 直接从logging获取对应的级别常量 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    log_level = getattr(logging, log_level.upper()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    console_level = getattr(logging, console_level.upper()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    file_level = getattr(logging, file_level.upper()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					     | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return BRepLogger(log_level, console_level, file_level, include_trace) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					# 使用默认配置创建全局logger实例 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					logger = setup_logger( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    log_level='DEBUG',      # 记录所有级别日志 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    console_level='DEBUG',  # 控制台显示所有日志 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    file_level='DEBUG',    # 文件记录所有日志 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    include_trace=True     # 包含调用栈信息 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					) |