将日志发送到 Crashlytics 而不会导致应用程序崩溃

问题描述 投票:0回答:10

如何让 Crashlytics 接收日志而不让我的应用程序崩溃? 我有以下代码:

if(!context.managedObjectContext save:&error) {
    CLS_LOG(@"%@",error.description)
}

发生错误时,我希望 Crashlytics 服务器接收错误,但应用程序应继续运行。

我不需要立即使用日志。我很高兴在下次重新启动时获得日志。我只是不想在我的应用程序中触发崩溃才能接收日志。

这可能吗?

ios crashlytics
10个回答
60
投票

通过 crashlytics 的新更新,您现在可以使用:

[[FIRCrashlytics crashlytics] recordError:error];

在 Swift 中:

Crashlytics.crashlytics().record(error: error)

您可以在此处查看文档。


14
投票

有点老问题,但现在你可以使用

Answers
,它是
Fabric
套装的一部分(
Crashlytics
也是
Fabric
的一部分):

Fabric可以在这里找到。以及更多文档此处


8
投票

我尝试了以下几行,它很有魅力。在 try-catch 块中,在 catch 块中使用以下行

@try {
// line of code here
}
@catch (NSException *exception) {
NSUncaughtExceptionHandler *handler = NSGetUncaughtExceptionHandler();
handler(exception);
}

http://support.crashlytics.com/knowledgebase/articles/222764-can-i-use-a-custom-exception-handler

所解释

[更新]

现在在 Fabric 的 crashlytics 中,我们可以使用简单的函数

[Crashlytics recordCustomExceptionName:reason:frameArray:]
来发送已处理的异常

@try {
// line of code here
}
@catch (NSException *exception) {
    NSArray *stack = [exception callStackReturnAddresses];
    [[Crashlytics sharedInstance] recordCustomExceptionName: exception.name
                                                 reason: exception.reason
                                             frameArray: stack];
}

如所解释的 https://twittercommunity.com/t/crashlytics-ios-how-to-send-non-fatal-exceptions-without-app-crash/34592/32


4
投票

对我来说,方法

.recordError()
没有帮助,因为它不记录用户信息。或者我只是没有找到在哪里可以观看它。使用
recordCustomExceptionName
适合我。有一个实现这两种方式的例子:

func logMessage(_ message: String) {
    let userInfo = ["message" : message]
    let error = NSError(domain: "AppErrorDomain", code: 1, userInfo: userInfo)
    Crashlytics.sharedInstance().recordCustomExceptionName("API Error", reason: message, frameArray: [])
    Crashlytics.sharedInstance().recordError(error, withAdditionalUserInfo: userInfo)
}

2
投票

Swift 5、Crashlytics SDK 4.0.0-beta.6:

let exceptionModel = ExceptionModel(name: "exception title", reason: "details")
Crashlytics.crashlytics().record(exceptionModel: exceptionModel)

...与 NSError 类似,包含您想在 Crashlytics 仪表板中看到的任何内容。

let error = NSError(domain: "error title", code: 0, userInfo: ["message":"some details"])
Crashlytics.crashlytics().record(error: error)

1
投票

iOS 日志非致命异常

官方文档

Crashlytics.crashlytics().record(error: error)

另请查看测试阶段。实际上 Firebase 推荐

  • 不要使用调试模式
  • 记录的错误在下一次应用程序启动时发送
  • 您可以在模式参数中使用
  • -FIRDebugEnabled
    [关于]并在日志中找到Completed report submission
    以确保其已发送
  • 等待超过 5 分钟(我的情况约为 1 小时)
  • 我只能从真实设备(而不是模拟器)找到登录仪表板
  • 如果您使用
  • -FIRDebugEnabled
    ,您在禁用或删除此参数后仍然可以看到日志。要修复它,请使用 
    -FIRDebugDisabled
     参数

-3
投票
参考 Crashlytics 文档。

try { myMethodThatThrows(); } catch (Exception e) { Crashlytics.logException(e); // handle your exception here! }

https://docs.fabric.io/android/crashlytics/caught-exceptions.html?caught%20exceptions#caught-exceptions


-4
投票
据我所知,如果你没有正确保护你的代码,你的应用程序无论如何都会崩溃。 Crashlylytics,获取此崩溃并在他们设计的 Web 应用程序中以“可读”模式向您展示它们。如果没有崩溃,crashlytics 会采取一切措施。您可以在代码中捕获异常:

@try{ .... } @catch(NSException ex){...}

在关键部分,但是如果您担心您的应用程序会崩溃或者您发现潜在的错误可能导致您的应用程序出现不良行为并发生故障,那么您应该始终这样做。您始终可以强制在异常中发送或跟踪此错误。

希望有帮助


-4
投票
技巧是使用以下内容:

http://support.crashlytics.com/knowledgebase/articles/202805-logging-caught-exceptions

就用这个:

Crashlytics.logException(new Exception("my custom log for crashLytics !!!"));

我使用这个,大约 5 分钟内就发生了非致命的崩溃!


-4
投票
Crashlytics 是一项崩溃跟踪服务,如果您需要跟踪自定义消息,请选择其他分析服务。

© www.soinside.com 2019 - 2024. All rights reserved.