sentry中python sdk 捕捉异常原理

最近有个任务把线上的异常用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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值