如何配置Python Sentry仅捕获foo包错误,排除bar包错误?
问题分析与解决方案
你确实误解了in_app_include的作用——这个配置只是用来在Sentry后台区分应用内代码和第三方代码的显示逻辑,并不会过滤掉来自非指定模块的错误。Sentry默认会捕获所有未被捕获的全局异常,不管这些异常来自哪个模块,所以当前配置下,bar里的Bar error也会被上报。
要实现仅捕获foo包内的错误,你需要用Sentry的before_send钩子,在事件发送到Sentry服务器前做过滤判断:
修改foo的初始化配置
在foo的__init__.py中,给sentry_sdk.init添加before_send参数,检查异常的栈帧是否包含foo模块的代码:
import sentry_sdk from sentry_sdk.utils import get_stacktrace def filter_sentry_events(event, hint): # 获取异常的栈帧信息 stacktrace = get_stacktrace(hint) if not stacktrace: return None # 检查是否有栈帧属于foo包 has_foo_frame = any( frame.get('module', '').startswith('foo.') for frame in stacktrace ) # 只有包含foo模块的栈帧时,才发送事件 return event if has_foo_frame else None sentry_sdk.init( dsn="blablabla", traces_sample_rate=1.0, before_send=filter_sentry_events )
额外说明
- 如果bar中的异常是被主动捕获处理的,Sentry本来就不会上报;只有未被捕获的全局异常才会被默认捕获。
- 不要在bar中随意调用
sentry_sdk.init重复初始化,这会覆盖foo的配置;也不建议用sentry_sdk.disable(),这会完全关闭Sentry,导致foo的错误也无法上报。
内容的提问来源于stack exchange,提问作者Munshine
相关产品推荐
相关产品推荐

