项目痛点
出现偶现崩溃或ANR
,因为没有开启日志开关,后面尝试复现又比较困难,研发同事比较苦恼,无从下手
还有一个测试同事抓取日志后还要记录时间点,再上传到JIRA上,研发同事下载日志还需要搜索报错点,整个流程比较费时
初步想法
可不可以将所有ANR
,Crash
等出错信息的关键日志片段直接传给服务器,在后面的摸索过程中发现钉钉可以提供对外的URL接口,这样的话直接传给钉钉就很方便了,正好平时的办公用的也是这个软件,这样一来就省去了很多的步骤,一步到位
以下是实做的步骤记录,只是实现了一个初稿,后面还需要不断优化完善
Step1: 获取钉钉的Webhook
地址
这个地址后面作为推送的目标地址
在钉钉中添加机器人接口的步骤参见官网文档
https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.XJQ2yZ&treeId=257&articleId=105735&docType=1
通过以上步骤拿到了Laucnher的Webhook地址,如下:
https://oapi.dingtalk.com/robot/send?access_token=a937a86122149aa52a694dd79fae2cdec1c7e448c62bff31471088ec13e941
Step2:源码层增加上报机制
之所以考虑在源码层中修改,是因为我们需要监测系统中所有应用的出错情况,想到AMS
中的Crash
弹框,猜想其中一定有相关的写入报错日志的操作
这里调用了handleApplicationCrashInner
这个函数,接着看这个函数
这里追加了一行日志,在应用层添加会造成crash
的代码片段,看看这行日志打出的信息
这里会打出eventtype
类型,报错进程,以及关键的堆栈信息,其中的eventtype
包括了watchdog
、anr
、wtf
、lowmem
、native_crash
、crash
完全满足我们的要求,接下来就是如何把这段发给钉钉了
在handleApplicationCrashInner
中增加接口reportAllErrorToXunDingTalk
reportAllErrorToXunDingTalk
接口如下:
这个时候应用端报错的话话,钉钉群会收到消息
good night!