在没有应用程序崩溃的情况下将日志发送到Crashlytics

时间:2014-07-25 07:58:51

标签: ios crashlytics

如何在没有我的应用程序崩溃的情况下让Crashlytics接收日志? 我有以下代码:

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

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

我不需要马上记录。我很乐意在下次重启时获取日志。我只是不想在我的应用程序中触发崩溃以接收日志。

这可能吗?

9 个答案:

答案 0 :(得分:47)

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

[[Crashlytics sharedInstance] recordError:error];

在斯威夫特:

Crashlytics.sharedInstance().recordError(error)

您可以查看文档here

答案 1 :(得分:13)

有点老问题,但现在您可以使用属于Answers诉讼的Fabric Crashlytics也是Fabric的一部分:

enter image description here

Fabric可以在这里找到。以及进一步的文档here

答案 2 :(得分:7)

我尝试了以下几行,它就像魅力一样。在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

所述

[UPDATE]

现在在面料的崩解中,我们可以使用简单的函数[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

答案 3 :(得分: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)

答案 4 :(得分:1)

对我来说,方法.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)
}

答案 5 :(得分:-1)

参考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

答案 6 :(得分:-3)

据我所知,如果你没有正确保护你的代码,你的应用程序无论如何都会崩溃。 Crashlylytics,抓住这个崩溃,并在他们设计的Web应用程序中以“可读”模式向您展示。如果没有崩溃,crashlytics将采取任何措施。您可以在代码中获取异常:

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

在关键部分,但如果你害怕你的应用程序崩溃或者你发现一个可能让你的应用程序有不良行为并且表现不佳的潜在错误,你应该总是这样做。您可以随时强制执行异常以发送或跟踪此错误。

希望有所帮助

答案 7 :(得分:-3)

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

答案 8 :(得分:-4)

诀窍是使用以下内容:

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

请使用:

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

我使用这个,我在大约5分钟内得到了非致命的崩溃!