Firebase Flatter Crashlytics日志捕获异常

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

寻找一些关于如何使用Flatter的
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(),
      });
}