如何捕获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
相关产品推荐
相关产品推荐

