在Sentry中不触发异常能否获取前后端stack trace及breadcrumbs?
实现方案
后端(Python)实现
Sentry Python SDK 会在本地内存中缓存当前上下文的 breadcrumbs 与调用栈信息,无需上报即可直接读取:
- 初始化SDK时配置
max_breadcrumbs=50,限定本地最多缓存50条操作记录,符合你的需求 - 调用
sentry_sdk.scope.get_current_scope()即可获取当前活跃上下文对象,其breadcrumbs属性即为缓存的操作记录 - 调用
sentry_sdk.utils.get_stacktrace()可直接获取当前调用栈的格式化内容,无需主动抛出异常 - 全程不调用任何
capture_*开头的上报方法,就不会在Sentry后台生成任何事件
代码示例:
import sentry_sdk from sentry_sdk.scope import get_current_scope from sentry_sdk.utils import get_stacktrace # SDK初始化配置 sentry_sdk.init( dsn="你的项目DSN", max_breadcrumbs=50, # 其余原有配置保持不变 ) # 本地读取数据逻辑,不会触发上报 def fetch_local_sentry_data(): current_scope = get_current_scope() # 读取最近50条操作记录 recent_breadcrumbs = list(current_scope.breadcrumbs) # 读取当前栈追踪,添加参数可过滤SDK自身的调用帧 current_stacktrace = get_stacktrace(include_sentry_frames=False) return { "breadcrumbs": recent_breadcrumbs, "stack_trace": current_stacktrace }
前端实现
前端Sentry SDK的逻辑与后端一致,所有缓存数据都可本地读取不上报:
- 初始化SDK时配置
maxBreadcrumbs: 50,限定缓存的操作记录数量 - 调用
Sentry.getCurrentScope()获取当前上下文,调用getBreadcrumbs()方法即可拿到最近50条操作记录 - 借助
Sentry.utils.getStackTrace()方法即可获取当前调用栈,无需抛出错误 - 不调用
captureException、captureMessage等上报方法,就不会生成Sentry事件
代码示例:
// SDK初始化配置 Sentry.init({ dsn: "你的项目DSN", maxBreadcrumbs: 50, // 其余原有配置保持不变 }) // 本地读取数据逻辑,不会触发上报 const fetchLocalSentryData = () => { const currentScope = Sentry.getCurrentScope() // 读取最近50条操作记录 const recentBreadcrumbs = currentScope.getBreadcrumbs() // 读取当前栈追踪 const currentStacktrace = Sentry.utils.getStackTrace(new Error()) return { breadcrumbs: recentBreadcrumbs, stackTrace: currentStacktrace } }
注意事项
- Sentry默认会对后端的每个请求做scope隔离,不同请求的breadcrumbs不会共享,如果需要全局的操作记录,可自行配置scope继承逻辑或者额外维护一份操作日志
- 读取的栈追踪默认包含Sentry SDK自身的调用帧,可通过对应方法的过滤参数剔除不需要的帧内容
- 全程没有任何上报行为,不会在Sentry后台生成事件,也不会触发任何告警规则
内容的提问来源于stack exchange,提问作者Sakshi Gupta
相关产品推荐
相关产品推荐

