-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathglobal_exc_handler.py
42 lines (31 loc) · 1.42 KB
/
global_exc_handler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import traceback
import sys
from Log4p.core import *
Mainlogger = LogManager().GetLogger("Exception")
def format_stack_trace(exctype, value, tb, nested=False):
tb_list = traceback.extract_tb(tb)
if nested:
exception_info = f"{exctype.__name__}: {value}\n"
else:
exception_info = f"An Fatal Error has occurred: {exctype.__name__}: {value}\n"
exception_info += "Traceback (most recent call last):\n"
for filename, lineno, funcname, line in tb_list:
exception_info += f" at {funcname} in ({filename}:{lineno})\n"
# 检查是否有原因和其他信息
cause = getattr(value, '__cause__', None)
context = getattr(value, '__context__', None)
if cause:
exception_info += "failure because of: "
exception_info += format_stack_trace(type(cause), cause, cause.__traceback__, nested=True)
if context and not cause:
exception_info += "caught exception: "
exception_info += format_stack_trace(type(context), context, context.__traceback__, nested=True)
return exception_info
def exception_hook(exctype, value, tb):
# 获取回溯信息并格式化为字符串
tb_str = format_stack_trace(exctype, value, tb)
# 记录异常信息到日志
exception_info = "发生异常:\n"
exception_info += tb_str
Mainlogger.critical(exception_info)
sys.excepthook = exception_hook