如何选择移动应用开发人员的崩溃日志工具?

android studio 相关说明 | 2019-02-02 22:33

21CTO导读:我们来看一下日志为什么在移动应用中如何选择良好的崩溃日志管理工具。

在软件开发领域,当开发人员发现在程序里某些功能没发生作用时,首先想到的就是看日志。日志为开发人员提供幕后的视图,通过它了解程序运行时的情况。

当前,在移动开发领域,开发者并没有使用日志来分析应用发生的问题。有些时候甚至在上线之前删除了这个特性。例如在Android中,使用”proguard“来删除日志。

日志的意义

我们来看一下日志的重要性。日志的重要性分为开发阶段和部署(QA/阶段/生产)阶段。

开发阶段

在开发领域,有两个彼此矛盾的设计哲学:

1、将日志应用于全部行为

每当程序员想知道代码里发生了什么,只需要添加日志就可以,这样我们能够轻松地看到事情发生的全部流程。

2、全部使用调试器

调试器提供的信息远远多于日志,而且日志也耗费资源。实际上通常出现在中间的某个地方。

毫无疑问,现代IDE都提供了极出色的调试器。跟踪代码的需求比以前少得多,比如使用断点,我们可以在需要的地方停止程序运行,获取当前状态的全部信息。

调试器的问题是,只能前过去时,在调试位置之前看不到内容。你需要重新运行整个程序。而通过查看日志能够知道哪里究竟发生了什么,哪里可以运行更快。

使用日志可以在问题发生处获得整齐的信息,有时你不知道该从哪寻找。在这种情况下,添加日志,在日志中查找代码的问题位置就让问题容易得多,定位成功后,我们可以继续使用调试器。

另外,在程序是多线程的情况下,使用调试器就变得无能为力了,我们没办法进入新线程,它不是程序的下一步。而且有时候程序的流程也会因调试而发生改变。

部署(QA/分段/上线)阶段

等到了产品部署阶段后,日志是解决问题的最佳方案,它也是掌握实际情况的唯一方法。有日志,我们可以看到问题发生时代码的执行情况,它还向开发者显示存在的问题。如果收到错误/警告,就需要了解它为什么会发生,日志会显示需要处理的问题详细。

日志级别也很重要。在警告和向上的阶段具有日志级别,会在问题出现时向你展示,但是解决不了分析问题的根源。

因此,需要有一种方法提供配置的修改,以此能够在资源成本与信息获取的问题分析之间取得平衡。

移动开发人员为什么不愿意使用日志

移动开发者不擅长使用日志,有以下两个原因:

1、现代应用开发人员的DNA

2、缺少足够的测试平台

现代应用开发者的DNA

移动开发是一个相对复杂的主题。开发服务器端的开发者不会涉及移动端,而大多数移动端人员是将前端做为第一份工作,没有后端开发经验。大多数应用甚至没有在公司内部开发,而是由软件公司代为开发的。

这些移动开发者,基本没有软件开发领域常见的方法和知识。

Android Studio与iOS XCode提供优秀的IDE,不需要为开发编写日志,但是App投入运营后问题便会出现,没有太好的办法进行实时分析。

原生SDK缺少足够好的日志平台

iOS在默认情况下,可以使用NSLog和pint语句。NSLog语句出现在设备和调试器控制台中,print语句只显示调试器控制台的信息。

NSLog为输出添加时间戳和标识符,比print语句要慢。

从iOS 10开始,有一个新的系统是 os_log()。与NSLog类似,它添加时间戳和标识符,显示在设备和调试器控制台中。此外,也可以控制Console应用程序中提供的“子系统”和“类别”字段。可以指定不同类型的日志消息,如:.info,.debug,.error和.fault。

Xcode调试器控制台提供的是基本的功能。一旦存有很多日志就很难找到你需要的东西,并而没有过滤,我们唯一能做的就是根据字符串搜索。

这也就是很多iOS开发人员不擅于用日志的原因。只有在处理特定部分的情况下,才会添加日志帮助调试,完成后就会删掉它。

有一个重要的问题是,当应用程序进入另一台设备时,iOS开发人员就无法远程查看这些日志。

在Android平台, 默认情况下有android.util.log这个API,它使得开发人员能够以适当的方式登录,在Android Studio中进行开发时,开发人员可以使用logcat为开发阶段提供相对较好的解决方案。可以用正则表达式并根据日志严重级别来搜索它。

所以,大多数Android开发人员都会编写日志。

但是Android的问题与iOS类似。一旦应用程序到了另一台设备,开发人员就无法远程查看到这些日志。另个Android设备的碎片化,测试人员每天需要对用户的反馈进行复现,资源也造臧一定的浪费。

移动日志系统应该具备哪些功能?

就像我们看到的那样,默认的iOS和Android日志远远不够开发者的需求,没有能够远程查看日志或将其上传到可以查看的地方的技术基础。

一个优秀移动云平台应该具备哪些功能,列表如下:

1、记录到服务/云平台:日志应该上传到云平台,开发人员可以随时查看。只有在客户投诉时发送信息的系统是不够的,我们无法在没有用户参与的情况下看到问题。

2、会话和基于用户的日志记录:应根据会话和设备保存信息。也不用把所有消息都存储在服务器中,只需要跟踪到会话或用户的完整流程即可。

3、日志分析功能:开发者可以根据日志严重性,操作系统版本,应用程序版本,设备类型,应用程序状态等进行查看,跟踪与搜索。

4、远程日志配置:能够根据当前需要远程关闭和打开日志。还可以根据严重性和类别(标签)配置哪些日志是打开或关闭的。

5、日志监视和警报:应该能够在高级别上监视根据日志查看应用程序的状态,并在系统监视问题时自动发送警报。警报系统为自动化处理。开发人员不必根据自身理解的方式创建警报,这样不会错过他们没想到的事情。

6、崩溃报告和日志管理:将这两个工具放在一个地方非常重要。如果没有之前发生的日志,崩溃报告就不完整。如果有一些应用崩溃出现,可以在代码中看到导致崩溃的行,但仍然不明确怎样处理这种情况。

以下向大家介绍一些移动应用崩溃日志工具:

腾讯bugly,应用崩溃分析能力优秀,并且提供了一定的运营数据统计能力。

友盟u-app,侧重于专业的运营数据的统计,但在崩溃分析方面,相比其他工具显得单一。

Crasheye,同样拥有优秀的崩溃分析能力,但不具备运营数据的统计。但在测试阶段,不需要统计运营数据时,其一行代码快速接入SDK的能力,方便快速开发,是其优势所在。

网易云捕,最全面的Android/iOS应用程序崩溃收集SDK。

总而言之,这几款工具各自的优势和侧重点不同。根据具体场景的需要,可以选择合适的工具进行开发。

编辑:周小七

来源:21CTO社区