You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何捕获Shiny应用在R控制台输出的完整错误回溯信息?

捕获Shiny完整错误回溯并上报至Sentry的方法

要解决Shiny应用错误回溯无法通过sentryR上报至Sentry的问题,可通过自定义Shiny全局错误处理函数,结合rlang包获取标准格式的回溯信息,再整合到上报内容中,具体步骤如下:

1. 加载依赖包并初始化Sentry

library(shiny)
library(sentryR)
library(rlang)

# 初始化Sentry连接
sentryR::sentry_init(
  dsn = "你的Sentry DSN地址",
  app_name = "你的Shiny应用名称"
)

2. 自定义全局错误处理函数

替换Shiny默认的错误处理逻辑,在错误触发时主动捕获控制台格式的回溯信息:

options(shiny.error = function() {
  # 获取与R控制台一致的结构化回溯
  traceback_obj <- rlang::trace_back()
  # 将回溯对象转换为可读字符串
  traceback_str <- paste(capture.output(print(traceback_obj)), collapse = "\n")
  
  # 获取错误核心消息
  error_msg <- geterrmessage()
  
  # 上报至Sentry,将回溯作为额外信息附加
  sentryR::capture_message(
    message = error_msg,
    level = "error",
    extra = list(完整回溯 = traceback_str)
  )
})

3. 示例Shiny应用

ui <- fluidPage(
  actionButton("trigger_btn", "Trigger Error")
)

server <- function(input, output, session) {
  observeEvent(input$trigger_btn, {
    # 触发测试错误
    stop("测试:主动抛出的错误")
  })
}

shinyApp(ui, server)

关键说明

  • rlang::trace_back()生成的回溯信息与R控制台输出格式完全一致,避免了sys.calls()的冗余内容
  • 若需要结构化的回溯数据(方便Sentry解析筛选),可将traceback_str替换为rlang::as_list(traceback_obj),直接上报列表格式的回溯
  • 上报的extra字段会在Sentry仪表盘的错误详情中显示,可直接查看完整回溯内容

内容的提问来源于stack exchange,提问作者umair durrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:35:00