美文网首页python
sentry中python sdk 捕捉异常原理

sentry中python sdk 捕捉异常原理

作者: 祁小彬 | 来源:发表于2021-11-21 08:23 被阅读0次

原文:sentry中python sdk 捕捉异常原理_果汁华的博客-CSDN博客

最近有个任务把线上的异常用sentry收集,搭建和上报还是比较顺利。官网文档详细。点个赞。部署上线后,我对它是怎么捕捉异常的产生疑问,下载了源码(https://github.com/getsentry/sentry-python),分析了一下。

首先,查看sentry_sdk中api.py文件,这里的一个capture_exception方法引起了我的注意,应该能顺着它知道捕捉异常的地方;


image.png

跳转进入hub.capture_execption:


image.png

貌似并没有什么特殊。再看看event_from_exception


image.png

也没有看出它在哪里捕捉了原来的异常。

再看看integrations(集成)目录,像是适配不同的服务的日志收集,应该是我们要找的东西,要找到异常,那应该是跟except有关,打开可疑的excepthook目录瞧一瞧。


image.png

果然就是它了。


image.png

它通过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

相关文章

网友评论

    本文标题:sentry中python sdk 捕捉异常原理

    本文链接:https://www.haomeiwen.com/subject/nlohtrtx.html