sentry中python sdk 捕捉异常原理
最近有个任务把线上的异常用sentry收集,搭建和上报还是比较顺利。官网文档详细。点个赞。部署上线后,我对它是怎么捕捉异常的产生疑问,下载了源码(https://github.com/getsentry/sentry-python),分析了一下。首先,查看sentry_sdk中api.py文件,这里的一个capture_exception方法引起了我的注意,应该能顺着它知道捕捉异常的地方...
最近有个任务把线上的异常用sentry收集,搭建和上报还是比较顺利。官网文档详细。点个赞。部署上线后,我对它是怎么捕捉异常的产生疑问,下载了源码(https://github.com/getsentry/sentry-python),分析了一下。
首先,查看sentry_sdk中api.py文件,这里的一个capture_exception方法引起了我的注意,应该能顺着它知道捕捉异常的地方;
跳转进入hub.capture_execption:
貌似并没有什么特殊。再看看event_from_exception
也没有看出它在哪里捕捉了原来的异常。
再看看integrations(集成)目录,像是适配不同的服务的日志收集,应该是我们要找的东西,要找到异常,那应该是跟except有关,打开可疑的excepthook目录瞧一瞧。
果然就是它了。
它通过python的excepthook实现捕捉异常,上报。
写一个简单例子,让python触发异常的时候,先调用一些我们定义的东西:
>>> import sys
>>> def myExcepthook(ttype, tvalue, ttraceback):
... print("进入我定义的异常")
... print("例外类型:{}".format(ttype))
... print("例外对象:{}".format(tvalue))
... print("结束我定义的异常")
...
>>> sys.excepthook = myExcepthook
>>> 1/0
进入我定义的异常
例外类型:<type 'exceptions.ZeroDivisionError'>
例外对象:integer division or modulo by zero
结束我定义的异常
在把excepthook设置回None.
>>> sys.excepthook = None
>>> 1/0
sys.excepthook is missing
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
又恢复了。
更多excepthook使用例子:https://www.programcreek.com/python/example/1013/sys.excepthook
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)