fix: 修复日志系统问题,将日志保存到用户目录,修复打包后崩溃问题
This commit is contained in:
@@ -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
|
||||||
80
logger.py
80
logger.py
@@ -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():
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user