Firebase Flatter Crashlytics日志捕获异常
寻找一些关于如何使用Flatter的Firebase Flatter Crashlytics日志捕获异常,firebase,flutter,crashlytics,Firebase,Flutter,Crashlytics,寻找一些关于如何使用Flatter的firebase\u crashlytics包记录捕获的异常的澄清 如果我理解正确(并且通过运行一些示例代码)Crashlytics.instance.log('text')只会将日志添加到下一个崩溃报告中,而不会发送非致命问题本身 我正在寻找的功能相当于Crashlytics.logException(e)在Android上,例如 try { throwException(); } catch (e) { Crashlytics.logExcepti
firebase\u crashlytics
包记录捕获的异常的澄清
如果我理解正确(并且通过运行一些示例代码)Crashlytics.instance.log('text')代码>只会将日志添加到下一个崩溃报告中,而不会发送非致命问题本身
我正在寻找的功能相当于Crashlytics.logException(e)代码>在Android上,例如
try {
throwException();
} catch (e) {
Crashlytics.logException(e);
}
它允许您记录捕获的异常,以便它们在Crashlytics仪表板中显示为非致命问题
目前,这是否适用于Flitter的firebase_crashlytics软件包
现在调用Crashlytics.instance.recordError('text',StackTrace.current)
是实现这一点的方法吗
非常感谢 简短的回答,是的
Crashlytics.instance.recordError()
相当于Crashlytics.logException()
如果您深入研究flatter源代码,您实际上可以看到涉及到哪些Android api
Flatter调用Android库中的方法
跟踪Crashlytics#onError,您将看到它进入Crashlytics.logException(exception)代码>
另外注意,您还将注意到为什么Crashlytics.instance.log()
“只会将日志添加到下一个崩溃报告中”。这些日志被添加到ListQueue\u日志
,然后打包到下一次调用recordError()
弗利特的一段话:
\u记录错误(…){
...
最终字符串结果=等待通道
.invokeMethod('Crashlytics#onError'{
'异常':“${exception.toString()}”,
“上下文”:“$context”,
"信息":"信息,,
“stackTraceElements”:stackTraceElements,
'logs':_logs.toList(),
“键”:_prepareKeys(),
});
}
以及一些参考资料:
要减少用户的网络流量,请登录Crashlytics批处理
异常一起发送,并在下次应用程序启动时发送
对于任何单个应用程序会话,仅记录最近的8个会话
存储异常
为了添加到已接受的答案中,Crashlytics.instance.recordError()
现在已不推荐使用新方法FirebaseCrashlytics.instance.recordError(异常,堆栈)
奖金提示:
在Crashlytics dashboard中,所有记录的异常都被分组在同一个问题下,我遇到了这个问题。这些可能是相同或不同代码组件的不同崩溃。因此,我不得不手动检查每个崩溃实例以进行验证
从我自己的测试中,我发现分组是基于您传递到上述方法的堆栈跟踪中最顶层的行。幸运的是,Dart可以使用StackTrace.current
轻松获取当前堆栈跟踪
因此,要正确地对问题进行分组:获取异常发生时的当前堆栈跟踪,并将其传递到FirebaseCrashlytics.instance.recordError(异常,堆栈)
希望这对其他人有所帮助,我在互联网上到处寻找类似的问题,但没有找到
_recordError(...) {
...
final String result = await channel
.invokeMethod<String>('Crashlytics#onError', <String, dynamic>{
'exception': "${exception.toString()}",
'context': '$context',
'information': _information,
'stackTraceElements': stackTraceElements,
'logs': _logs.toList(),
'keys': _prepareKeys(),
});
}