fix: 修复日志系统问题,将日志保存到用户目录,修复打包后崩溃问题

This commit is contained in:
ruisu
2025-02-19 17:56:30 +08:00
parent 0b6b3f13aa
commit 98863b8cb5
2 changed files with 63 additions and 77 deletions

View File

@@ -5,44 +5,22 @@ from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QHBoxLayout, QDialog) QHBoxLayout, QDialog)
from PyQt6.QtCore import Qt, QTimer, QPropertyAnimation from PyQt6.QtCore import Qt, QTimer, QPropertyAnimation
from PyQt6.QtGui import QIcon, QPixmap from PyQt6.QtGui import QIcon, QPixmap
import cursor_account_manager as backend
from logger import logging
import traceback import traceback
import tempfile
# 设置日志文件路径 # 创建临时日志文件
def setup_logging(): temp_log_file = os.path.join(tempfile.gettempdir(), 'cursor_helper_error.log')
try:
# 获取应用程序所在目录
if getattr(sys, 'frozen', False):
# 如果是打包后的应用程序
app_dir = os.path.dirname(sys.executable)
else:
# 如果是开发环境
app_dir = os.path.dirname(os.path.abspath(__file__))
# 创建日志目录 def log_error(error_msg):
log_dir = os.path.join(app_dir, 'logs') with open(temp_log_file, 'a', encoding='utf-8') as f:
os.makedirs(log_dir, exist_ok=True) f.write(f"{error_msg}\n")
# 设置日志文件路径 try:
log_file = os.path.join(log_dir, 'app.log') from logger import logging
import cursor_account_manager as backend
# 配置日志记录 except Exception as e:
logging.basicConfig( log_error(f"导入模块错误: {str(e)}\n{traceback.format_exc()}")
level=logging.INFO, raise
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())
class SuccessDialog(QDialog): class SuccessDialog(QDialog):
def __init__(self, message, parent=None): def __init__(self, message, parent=None):
@@ -525,9 +503,6 @@ class CursorGUI(QMainWindow):
if __name__ == "__main__": if __name__ == "__main__":
try: try:
# 初始化日志系统
setup_logging()
# 记录启动信息 # 记录启动信息
logging.info("=== 应用程序启动 ===") logging.info("=== 应用程序启动 ===")
logging.info(f"Python 版本: {sys.version}") logging.info(f"Python 版本: {sys.version}")
@@ -539,12 +514,15 @@ if __name__ == "__main__":
# 捕获未处理的异常 # 捕获未处理的异常
def handle_exception(exc_type, exc_value, exc_traceback): 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)) logging.error("未捕获的异常:", exc_info=(exc_type, exc_value, exc_traceback))
sys.excepthook = handle_exception sys.excepthook = handle_exception
sys.exit(app.exec()) sys.exit(app.exec())
except Exception as e: except Exception as e:
logging.error(f"程序启动失败: {str(e)}") error_msg = f"程序启动失败: {str(e)}\n{traceback.format_exc()}"
logging.error(traceback.format_exc()) log_error(error_msg)
logging.error(error_msg)
raise raise

View File

@@ -1,13 +1,8 @@
import logging import logging
import os import os
import sys
from datetime import datetime from datetime import datetime
# Configure logging
log_dir = "logs"
if not os.path.exists(log_dir):
os.makedirs(log_dir)
class PrefixFormatter(logging.Formatter): class PrefixFormatter(logging.Formatter):
"""自定义格式化器,为 DEBUG 级别日志添加开源项目前缀""" """自定义格式化器,为 DEBUG 级别日志添加开源项目前缀"""
@@ -16,37 +11,50 @@ class PrefixFormatter(logging.Formatter):
record.msg = f"[开源项目https://github.com/chengazhen/cursor-auto-free] {record.msg}" record.msg = f"[开源项目https://github.com/chengazhen/cursor-auto-free] {record.msg}"
return super().format(record) 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助手')
logging.basicConfig( # 创建应用程序支持目录
level=logging.DEBUG, os.makedirs(app_support_dir, exist_ok=True)
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: log_dir = os.path.join(app_support_dir, 'logs')
if isinstance(handler, logging.FileHandler): os.makedirs(log_dir, exist_ok=True)
handler.setFormatter(
PrefixFormatter("%(asctime)s - %(levelname)s - %(message)s")
)
# 设置日志文件路径
log_file = os.path.join(log_dir, f"{datetime.now().strftime('%Y-%m-%d')}.log")
# 创建控制台处理 # 创建日志记录
console_handler = logging.StreamHandler() logger = logging.getLogger('CursorHelper')
console_handler.setLevel(logging.INFO) logger.setLevel(logging.DEBUG)
console_handler.setFormatter(PrefixFormatter("%(message)s"))
# 将控制台处理器添加到日志记录 # 创建文件处理
logging.getLogger().addHandler(console_handler) file_handler = logging.FileHandler(log_file, encoding='utf-8')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(PrefixFormatter('%(asctime)s - %(levelname)s - %(message)s'))
# 打印日志目录所在路径 # 创建控制台处理器
logging.info(f"Logger initialized, log directory: {os.path.abspath(log_dir)}") 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 = setup_logger()
def main_task(): def main_task():
""" """