Android 使用crashlytics记录数据时遇到问题
我试图在android应用程序中使用Crashlytics获取包含一些服务数据的日志。但我在仪表板上看不到我的日志。 我用了这个:Android 使用crashlytics记录数据时遇到问题,android,logging,crashlytics,Android,Logging,Crashlytics,我试图在android应用程序中使用Crashlytics获取包含一些服务数据的日志。但我在仪表板上看不到我的日志。 我用了这个: String myLog = getServiceData(); //myLog is not null and non-empty CrashLytics.log(myLog); 这是: String myLog = getServiceData(); //myLog is not null and non-empty CrashLytics.log(Log.E
String myLog = getServiceData(); //myLog is not null and non-empty
CrashLytics.log(myLog);
这是:
String myLog = getServiceData(); //myLog is not null and non-empty
CrashLytics.log(Log.Error, getString(R.string.app_name), myLog);
我试图在应用程序中生成异常并进行处理,但没有结果:
try {
int a = 0;
a = 1/a;
}
catch (Exception e) {
CrashLytics.log(myLog);
}
此外,我还读到我需要在日志数据之前初始化crashlytics。我将Crashlytics.start(此)放在我的活动的onStart()事件中,但在仪表板中没有再次看到我的日志。最后,我尝试在记录数据之前直接将Crashlitycs.start(this)放在仪表板中,但仪表板中仍然没有日志
请告诉我我做错了什么,以及如何在Crashlytics仪表板中获取自定义日志?根据Crashlytics知识库: 记录的消息与您的崩溃数据关联,并且在中可见 如果查看特定的崩溃本身,将显示Crashlytics仪表板 根据我的经验,这似乎是真的。但是,我不确定是什么决定了哪些日志记录与崩溃报告相关。可能是某个时间窗口(崩溃前后的时间)或有限数量的日志(崩溃前)与崩溃报告关联 但是Crashlytics knowledgebase确实表示可以记录异常: 所有记录的异常都将在中显示为“非致命”问题 Crashlytics仪表板 因此,如果您将try/catch更改为:
try {
int a = 0;
a = 1/a;
}
catch (Exception e) {
CrashLytics.logException(e);
}
然后它会出现在Crashlytics仪表板上。我也遇到过类似的情况。通过一些实验,我能够推断出Crashlytics行为的规则 我在这里分享我的经验教训,这样(希望)其他人就不必像我一样经历艰苦和耗时的过程来找出答案 如果发生致命异常,Crashlytics仅会立即将崩溃报告“上载到仪表板”。换句话说,当你的应用程序崩溃时。除非上传崩溃报告,否则仪表板上不会显示任何内容 如果您使用
CrashLytics.logException(e)
记录非致命异常,则在下次重新启动应用程序之前,将不会上载故障报告。因此,在应用程序重新启动之前,您不会在Crashlytics仪表板中看到异常
您可以知道何时发生上载,因为您将在LogCat中看到此类消息:
07-17 19:30:41.47718815-18906/com.foo.bar I/Crashlytics﹕ Crashlytics报告上载完成:55A9BA0C01D7-0001-462D-B8B4C49333.cls
Crashlytics日志消息必须与致命或非致命异常关联,才能显示在仪表板中
此外,与异常无关的日志消息不会在应用程序重新启动后继续存在
因此,如果您执行类似于记录一些消息的操作,然后重新启动应用程序,然后应用程序抛出异常,或者使用Crashlytics.logException()
记录非致命异常,那么日志消息将丢失。它们不会出现在仪表板中
如果要记录一些没有致命异常的消息,请使用一个或多个Crashlytics.log()
语句,后跟Crashlytics.logException()
要验证它是否有效,请运行代码,然后重新启动应用程序。在仪表板中,您应该看到与为非致命异常创建的问题相关联的日志。在野外,你只需要信任你的用户,然后有规律地重新启动应用程序
在Fabric/Crashlytics仪表板上,您需要选择所有事件
或(如果您只想查看日志调用)非致命事件
您可以使用RuntimeExceptions代替捕获异常并记录它:
抛出新的运行时异常(“测试崩溃”)代码>
Android Studio将不要求您捕获这些信息,因此应用程序将立即终止并上传报告 这是一个老问题,但由于我今天遇到了同样的问题,我想我应该发布我的解决方案(尽管它在Kotlin中)
Crashlytics现在是谷歌Firebase产品的一部分,它在幕后进行初始化,因此我几年前写的一个解决方案必须更新为:
实现某种日志缓存,先进先出。我把一个放在一起的基础上
将此函数放入扩展应用程序的ApplicationClass中:
fun setExceptionHandler() {
val defaultExceptionHandler = Thread.getDefaultUncaughtExceptionHandler()
Thread.setDefaultUncaughtExceptionHandler { thread, ex ->
Crashlytics.log(cacheLoggingTree.getAll().joinToString("++"))
Crashlytics.logException(ex)
defaultExceptionHandler.uncaughtException(thread, ex)
}
}
然后从MainActivity中onCreate函数的末尾调用该函数:
(application as YourApplicationClass).setExceptionHandler()
这样,抛出的任何异常都将首先发布最新的日志条目,然后记录异常。不过,您可能需要小心缓存多少行,以免系统过载
此外,我使用++作为标记,在下载日志时手动替换为回车符,因为我在上载过程中\n已被剥离。如果我调用Crashlytics.logException()。应用程序重新启动后,我可以在仪表板上看到此日志。但在Crashlytics.log(android.util.log.INFO,tag,msg)、Crashlytics.log(android.util.log.ERROR,tag,msg)、Crashlytics.log(android.util.log.DEBUG,tag,msg)之前和之后调用的另一个日志Crashlytics.log(android.util.log.DEBUG,tag,msg)不会出现在仪表板上。请帮助我如何让它们显示在仪表板上。如何记录与致命或非致命异常相关的Crashlytics日志消息?感谢用户?从未!这需要打印出来并贴在墙上!你,先生!你是一个传奇!我希望日志存储在本地,上传时不会丢失close@RafaelLima-帮助调试为何崩溃报告工具无法工作的开发人员。在这种特定情况下,需要故意破坏应用程序。在你否决我之前,你读过这个问题吗?或者考虑问我的理由是什么?可能你没有,simple跳到了你能找到的最简单的解决方案中,以获得一些选票。。。一些人认为,问题是如何通过crashlytics跟踪应用程序的正常使用