diff --git a/cursor_gui.py b/cursor_gui.py index 4a08a95..8098ebe 100644 --- a/cursor_gui.py +++ b/cursor_gui.py @@ -5,44 +5,22 @@ from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QDialog) from PyQt6.QtCore import Qt, QTimer, QPropertyAnimation from PyQt6.QtGui import QIcon, QPixmap -import cursor_account_manager as backend -from logger import logging import traceback +import tempfile -# 设置日志文件路径 -def setup_logging(): - try: - # 获取应用程序所在目录 - if getattr(sys, 'frozen', False): - # 如果是打包后的应用程序 - app_dir = os.path.dirname(sys.executable) - else: - # 如果是开发环境 - app_dir = os.path.dirname(os.path.abspath(__file__)) - - # 创建日志目录 - log_dir = os.path.join(app_dir, 'logs') - os.makedirs(log_dir, exist_ok=True) - - # 设置日志文件路径 - log_file = os.path.join(log_dir, 'app.log') - - # 配置日志记录 - logging.basicConfig( - level=logging.INFO, - format='%(asctime)s [%(levelname)s] %(message)s', - handlers=[ - logging.FileHandler(log_file, encoding='utf-8'), - logging.StreamHandler() - ] - ) - - logging.info('日志系统初始化成功') - logging.info(f'日志文件路径: {log_file}') - - except Exception as e: - print(f"设置日志系统时出错: {str(e)}") - print(traceback.format_exc()) +# 创建临时日志文件 +temp_log_file = os.path.join(tempfile.gettempdir(), 'cursor_helper_error.log') + +def log_error(error_msg): + with open(temp_log_file, 'a', encoding='utf-8') as f: + f.write(f"{error_msg}\n") + +try: + from logger import logging + import cursor_account_manager as backend +except Exception as e: + log_error(f"导入模块错误: {str(e)}\n{traceback.format_exc()}") + raise class SuccessDialog(QDialog): def __init__(self, message, parent=None): @@ -525,9 +503,6 @@ class CursorGUI(QMainWindow): if __name__ == "__main__": try: - # 初始化日志系统 - setup_logging() - # 记录启动信息 logging.info("=== 应用程序启动 ===") logging.info(f"Python 版本: {sys.version}") @@ -539,12 +514,15 @@ if __name__ == "__main__": # 捕获未处理的异常 def handle_exception(exc_type, exc_value, exc_traceback): + error_msg = f"未捕获的异常:\n{traceback.format_exception(exc_type, exc_value, exc_traceback)}" + log_error(error_msg) logging.error("未捕获的异常:", exc_info=(exc_type, exc_value, exc_traceback)) sys.excepthook = handle_exception sys.exit(app.exec()) except Exception as e: - logging.error(f"程序启动失败: {str(e)}") - logging.error(traceback.format_exc()) + error_msg = f"程序启动失败: {str(e)}\n{traceback.format_exc()}" + log_error(error_msg) + logging.error(error_msg) raise \ No newline at end of file diff --git a/logger.py b/logger.py index a98ab5a..841b329 100644 --- a/logger.py +++ b/logger.py @@ -1,13 +1,8 @@ import logging import os +import sys from datetime import datetime -# Configure logging -log_dir = "logs" -if not os.path.exists(log_dir): - os.makedirs(log_dir) - - class PrefixFormatter(logging.Formatter): """自定义格式化器,为 DEBUG 级别日志添加开源项目前缀""" @@ -16,37 +11,50 @@ class PrefixFormatter(logging.Formatter): record.msg = f"[开源项目:https://github.com/chengazhen/cursor-auto-free] {record.msg}" return super().format(record) +def setup_logger(): + """设置日志系统""" + # 获取用户的应用程序支持目录 + if sys.platform == 'darwin': + app_support_dir = os.path.expanduser('~/Library/Application Support/听泉Cursor助手') + else: + app_support_dir = os.path.expanduser('~/.听泉Cursor助手') + + # 创建应用程序支持目录 + os.makedirs(app_support_dir, exist_ok=True) + + # 创建日志目录 + log_dir = os.path.join(app_support_dir, 'logs') + os.makedirs(log_dir, exist_ok=True) + + # 设置日志文件路径 + log_file = os.path.join(log_dir, f"{datetime.now().strftime('%Y-%m-%d')}.log") + + # 创建日志记录器 + logger = logging.getLogger('CursorHelper') + logger.setLevel(logging.DEBUG) + + # 创建文件处理器 + file_handler = logging.FileHandler(log_file, encoding='utf-8') + file_handler.setLevel(logging.DEBUG) + file_handler.setFormatter(PrefixFormatter('%(asctime)s - %(levelname)s - %(message)s')) + + # 创建控制台处理器 + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + console_handler.setFormatter(PrefixFormatter('%(message)s')) + + # 添加处理器到日志记录器 + logger.addHandler(file_handler) + logger.addHandler(console_handler) + + # 记录初始化信息 + logger.info('日志系统初始化成功') + logger.info(f'日志文件路径: {log_file}') + + return logger -logging.basicConfig( - level=logging.DEBUG, - format="%(asctime)s - %(levelname)s - %(message)s", - handlers=[ - logging.FileHandler( - os.path.join(log_dir, f"{datetime.now().strftime('%Y-%m-%d')}.log"), - encoding="utf-8", - ), - ], -) - -# 为文件处理器设置自定义格式化器 -for handler in logging.getLogger().handlers: - if isinstance(handler, logging.FileHandler): - handler.setFormatter( - PrefixFormatter("%(asctime)s - %(levelname)s - %(message)s") - ) - - -# 创建控制台处理器 -console_handler = logging.StreamHandler() -console_handler.setLevel(logging.INFO) -console_handler.setFormatter(PrefixFormatter("%(message)s")) - -# 将控制台处理器添加到日志记录器 -logging.getLogger().addHandler(console_handler) - -# 打印日志目录所在路径 -logging.info(f"Logger initialized, log directory: {os.path.abspath(log_dir)}") - +# 导出日志记录器 +logging = setup_logger() def main_task(): """