【问题标题】:Crashlytics does not display custom log entries in the Firebase ConsoleCrashlytics 不会在 Firebase 控制台中显示自定义日志条目
【发布时间】:2018-03-14 09:58:35
【问题描述】:

我已按照 Google 的说明将 Firebase Crashlytics 集成到我的应用中:

https://firebase.google.com/docs/crashlytics/get-started

我的问题是当我尝试进行自定义日志记录时,例如:

Crashlytics.log("testing");
Crashlytics.log(Log.ERROR, TAG, "testing");
Crashlytics.getInstance().crash();

Firebase Console 中,我得到了崩溃堆栈回调(如预期的那样),但只有一个(可能是第一个)来自第一个Crashlytics.log 调用完成的日志条目(但不是上面的那些)。

我已经等了 48 小时,看看是否有延迟,但什么也没出现。

当我在模拟器中“强制”崩溃时,它工作正常。

我也试过new RuntimeException()而不是Crashlytics.getInstance().crash()

我正在调用我的应用程序中包含的库中的Crashlytics 函数。

【问题讨论】:

  • 重启应用后检查了吗?
  • 你为什么不检查 Crashlytics 控制台而不是 firebase?
  • (1) 是的,我在重新启动应用程序后进行了检查。 (2) 使用 Crashalytics 控制台时,我需要一个 API 密钥。但是当我有一个 API 密钥时,我无法在 Firebase 控制台中获得它。此外,我更喜欢在 Firebase 控制台中收集“所有内容”。此外,它也应该在 Firebase 控制台中工作。

标签: android firebase crashlytics-android


【解决方案1】:

来自 Firebase 的 Mike 在这里。 Crashlytics 优先于捕获崩溃而不是编写自定义键或日志,因为捕获崩溃更重要。一旦发生崩溃,我们需要尽快采取行动,以获取设备的确切状态和所有正在运行的线程。崩溃后事情仍在发生变化和发生,因此为了获得最准确的堆栈跟踪,如果没有写出密钥或日志,我们将删除它并捕获崩溃。

鉴于您没有看到的日志是在崩溃发生之前发生的,我希望最接近崩溃的日志会被忽略。使用自定义日志和密钥时,最好尽早记录它们,例如当活动发生变化时。附带说明一下,对于非测试崩溃,这通常不是问题,因为您事先不知道崩溃将在您的应用中发生的位置。

【讨论】:

  • 我想使用 Crashlytics.log 了解导致特定功能的 SW 状态。在该函数中,我创建了一个崩溃,因此我可以在控制台中看到日志。崩溃仅发生在我没有实际使用的特定手机上(即我的一个测试人员得到了它)。所以我使用 Crashlytics 远程“调试”崩溃。也许将 Crashlytics.getInstance().crash() 调用延迟几毫秒就足够了?
  • 我在想,也许在其他线程不那么重要的特定调试场景中,日志可能更重要。因此,始终确保日志已“刷新”的特定选项不是很好吗?
  • 是的,如果您有特定的用户需要诊断问题,那么将崩溃延迟 10-20 毫秒就可以了。目前,没有计划添加可配置选项以确保在崩溃之前写入密钥/日志,但会与团队分享反馈。
  • 延迟后它工作得很好。虽然问题是如果我使用 Handler.postDelayed() 延迟崩溃,堆栈跟踪将不正确,因为它将与稍后执行 .crash() 的线程相关。请与团队分享反馈。在某些情况下,我当然可以看到需要完全确定日志已被刷新。感谢您的帮助。
  • 对于非致命的也可以这样工作吗?如果是这样,那么它会使 firebase 日志记录作为一种调试方法实际上毫无用处......
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2019-04-14
  • 2018-04-20
  • 2020-01-03
  • 2020-12-27
相关资源
最近更新 更多