# logger_utils.py import queue import datetime from colorama import Fore, Style, init # 初始化 colorama(仅 Windows 需要) init(autoreset=True) # 日志等级颜色映射(控制台 + UI) # LOG_COLORS → 控制台日志颜色(命令行) # LOG_STYLES → UI 日志样式(图形界面) LOG_COLORS = { 'default': Fore.CYAN, 'info': Fore.CYAN, 'warning': Fore.YELLOW, 'error': Fore.RED, 'trigger': Fore.GREEN, } # 【新增】UI 样式映射 LOG_STYLES = { 'default': {'color': 'cyan'}, 'info': {'color': 'cyan'}, 'warning': {'color': 'yellow'}, 'error': {'color': 'red'}, 'trigger': {'color': '#28a745'}, } class Logger: def __init__(self): self.log_queue = queue.Queue() self.append_log_func = None # 主程序的日志回调函数 def set_append_log(self, func): """设置主程序中的 append_log 函数""" self.append_log_func = func def log(self, message, level='default'): timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") full_message = f"[{timestamp}] {message}" # 控制台带颜色输出 color = LOG_COLORS.get(level.lower(), Fore.WHITE) print(f"{color}{full_message}{Style.RESET_ALL}") # 触发UI更新(如果已注册) if self.append_log_func: log_type = level.lower() style = LOG_STYLES.get(log_type, LOG_STYLES['default']) # 调用主程序的 append_log 方法,只传递纯文本和日志类型 self.append_log_func(full_message, log_type) def info(self, message): self.log(message, 'info') def warning(self, message): self.log(message, 'warning') def error(self, message): self.log(message, 'error') def trigger(self, message): self.log(message, 'trigger') def debug(self, message): self.log(message, 'debug') # 全局日志实例 global_logger = Logger() # 便捷方法,方便其他模块直接使用 def setup_logger(append_log_func): global_logger.set_append_log(append_log_func) def log_info(msg): global_logger.info(msg) def log_warning(msg): global_logger.warning(msg) def log_error(msg): global_logger.error(msg) def log_trigger(msg): global_logger.trigger(msg) def log_debug(msg): global_logger.debug(msg)