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:
# 获取应用程序所在目录 def log_error(error_msg):
if getattr(sys, 'frozen', False): with open(temp_log_file, 'a', encoding='utf-8') as f:
# 如果是打包后的应用程序 f.write(f"{error_msg}\n")
app_dir = os.path.dirname(sys.executable)
else: try:
# 如果是开发环境 from logger import logging
app_dir = os.path.dirname(os.path.abspath(__file__)) import cursor_account_manager as backend
except Exception as e:
# 创建日志目录 log_error(f"导入模块错误: {str(e)}\n{traceback.format_exc()}")
log_dir = os.path.join(app_dir, 'logs') raise
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())
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助手')
# 创建应用程序支持目录
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, logging = setup_logger()
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)}")
def main_task(): def main_task():
""" """