fix:模块化PFC
This commit is contained in:
72
src/common/crash_logger.py
Normal file
72
src/common/crash_logger.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import sys
|
||||
import traceback
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from logging.handlers import RotatingFileHandler
|
||||
|
||||
def setup_crash_logger():
|
||||
"""设置崩溃日志记录器"""
|
||||
# 创建logs/crash目录(如果不存在)
|
||||
crash_log_dir = Path("logs/crash")
|
||||
crash_log_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# 创建日志记录器
|
||||
crash_logger = logging.getLogger('crash_logger')
|
||||
crash_logger.setLevel(logging.ERROR)
|
||||
|
||||
# 设置日志格式
|
||||
formatter = logging.Formatter(
|
||||
'%(asctime)s - %(name)s - %(levelname)s\n'
|
||||
'异常类型: %(exc_info)s\n'
|
||||
'详细信息:\n%(message)s\n'
|
||||
'-------------------\n'
|
||||
)
|
||||
|
||||
# 创建按大小轮转的文件处理器(最大10MB,保留5个备份)
|
||||
log_file = crash_log_dir / "crash.log"
|
||||
file_handler = RotatingFileHandler(
|
||||
log_file,
|
||||
maxBytes=10*1024*1024, # 10MB
|
||||
backupCount=5,
|
||||
encoding='utf-8'
|
||||
)
|
||||
file_handler.setFormatter(formatter)
|
||||
crash_logger.addHandler(file_handler)
|
||||
|
||||
return crash_logger
|
||||
|
||||
def log_crash(exc_type, exc_value, exc_traceback):
|
||||
"""记录崩溃信息到日志文件"""
|
||||
if exc_type is None:
|
||||
return
|
||||
|
||||
# 获取崩溃日志记录器
|
||||
crash_logger = logging.getLogger('crash_logger')
|
||||
|
||||
# 获取完整的异常堆栈信息
|
||||
stack_trace = ''.join(traceback.format_exception(exc_type, exc_value, exc_traceback))
|
||||
|
||||
# 记录崩溃信息
|
||||
crash_logger.error(
|
||||
stack_trace,
|
||||
exc_info=(exc_type, exc_value, exc_traceback)
|
||||
)
|
||||
|
||||
def install_crash_handler():
|
||||
"""安装全局异常处理器"""
|
||||
# 设置崩溃日志记录器
|
||||
setup_crash_logger()
|
||||
|
||||
# 保存原始的异常处理器
|
||||
original_hook = sys.excepthook
|
||||
|
||||
def exception_handler(exc_type, exc_value, exc_traceback):
|
||||
"""全局异常处理器"""
|
||||
# 记录崩溃信息
|
||||
log_crash(exc_type, exc_value, exc_traceback)
|
||||
|
||||
# 调用原始的异常处理器
|
||||
original_hook(exc_type, exc_value, exc_traceback)
|
||||
|
||||
# 设置全局异常处理器
|
||||
sys.excepthook = exception_handler
|
||||
Reference in New Issue
Block a user