如何检测Roku应用崩溃并将崩溃日志同步至自有日志?
Roku应用崩溃日志自动上报到自有日志系统
一、全局错误捕获
Roku BrightScript提供全局错误拦截机制,应用因未捕获的运行时错误崩溃前,会触发onError函数。在主入口脚本(如main.brs)中定义该函数即可拦截崩溃事件:
function onError(errorMsg as string, errorCode as integer, stackTrace as string) as void collectAndReportCrashLog(errorMsg, errorCode, stackTrace) return true ' 返回true可屏蔽系统默认崩溃提示(可选) end function
二、收集崩溃上下文数据
除错误本身信息外,建议补充设备、应用维度的上下文数据,便于后续问题排查:
function collectAndReportCrashLog(errorMsg as string, errorCode as integer, stackTrace as string) as void ' 收集设备基础信息 deviceInfo = CreateObject("roDeviceInfo") deviceData = { model: deviceInfo.GetModel(), osVersion: deviceInfo.GetOSVersion(), deviceId: deviceInfo.GetDeviceId() ' 注意隐私合规,可按需取舍 } ' 收集应用版本信息 appCtx = GetApplication() appData = { appId: appCtx.id, appVersion: appCtx.version } ' 构造完整崩溃日志结构 crashLog = { timestamp: CreateObject("roDateTime").ToISOString(), errorDetail: { message: errorMsg, code: errorCode, stackTrace: stackTrace }, device: deviceData, application: appData } sendCrashLogToCustomSystem(crashLog) end function
三、上报到自有日志系统
使用Roku的roUrlTransfer发送POST请求到你的日志接口,若担心崩溃时同步请求阻塞,可改用异步版本roAsyncUrlTransfer:
function sendCrashLogToCustomSystem(crashLog as object) as void apiUrl = "https://your-log-system.com/api/crash" ' 替换为你的实际接口地址 jsonPayload = FormatJSON(crashLog) urlTransfer = CreateObject("roUrlTransfer") urlTransfer.SetURL(apiUrl) urlTransfer.AddHeader("Content-Type", "application/json") try response = urlTransfer.PostFromString(jsonPayload) print "Crash log reported successfully: " + response catch err print "Crash report failed: " + err.Message ' 可选:将失败日志缓存到本地,下次应用启动时重试上报 saveCrashLogLocally(crashLog) end try end function ' 可选:本地缓存失败的崩溃日志 function saveCrashLogLocally(crashLog as object) as void fs = CreateObject("roFileSystem") logFileName = "tmp:/crash_" + Str(CreateObject("roDateTime").ToUnixTimestamp()) + ".json" fs.WriteFile(logFileName, FormatJSON(crashLog)) end function
四、关键注意事项
- 必须在应用
manifest文件中添加网络权限:network-access=true - 崩溃场景下避免执行复杂IO或计算操作,防止引发二次崩溃
- 若使用异步上报,需确保应用退出前请求能完成,或依赖下次启动重试逻辑
- 遵循隐私合规要求,不收集不必要的用户敏感数据
内容的提问来源于stack exchange,提问作者Govardhan
相关产品推荐
相关产品推荐

