Android acra 监控报错日志上报(acra版本4.9)
使用acra监控app运行时的崩溃日志,并上报服务器,方便排错。
acra是一款优秀的开源日志上报项目。它可以在你软件运行发生anr,carsh,oom等崩溃状况时拦截并收集报错信息上报服务端,与友盟等三方报错收集sdk功能相似,胜在稳定开元,可以根据需求方便自己定制。
使用方便简单可以编译成jar包(PS:jar包资源已经上传),可以将源码直接放入项目,也可以在build中直接添加依赖。使用详情可以参照 https://github.com/ACRA/acra/wiki/AdvancedUsage 官方的wiki。
这里讲一下acra 4.9 的使用:
一.acra的初始化
1.第一种基本使用方式:
@ReportsCrashes(formUri = "" , // 上报服务器的urlmode = ReportingInteractionMode.SILENT, //静默上报,没有任何提示reportType = HttpSender.Type.JSON, //数据格式jsonhttpMethod = HttpSender.Method.POST, //上报方式postcustomReportContent = {DROPBOX}, // 可选保留长文本或数据块includeDropBoxSystemTags = true, //是否检索系统标记事件dropboxCollectionMinutes = 30 // 设置上报的数据截取时间,这里截取前30分钟的)
public class MyApplication extends Application {@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);ACRA.DEV_LOGGING = true; // 是否进行log输出ACRA.init(this); //acra初始化}
}
其中使用customReportContent ,includeDropBoxSystemTags 需要权限
<uses-permission android:name="android.permission.READ_LOGS" />,当app拥有系统级权限时可以监测整机的报错日志,做整机源码开发时使用也很方便的可以监测整个系统的报错信息,方便调试抓错。
返回系统标记事件:
system_app_anr
system_app_wtf
system_app_crash
system_server_anr
system_server_wtf
system_server_crash
BATTERY_DISCHARGE_INFO
SYSTEM_RECOVERY_LOG
SYSTEM_BOOT
SYSTEM_LAST_KMSG
APANIC_CONSOLE
APANIC_THREADS
SYSTEM_RESTART
SYSTEM_TOMBSTONE
data_app_strictmode
2.第二种基本使用方式:
第一种是使用注解的方式,简单方便,但是注解中的参数只能使用常量,当你有些特殊需求要求动态地址变动等就无法适用,但我们还可以使用configuration。
public class MyApplication extends Application {@Overrideprotected void attachBaseContext(Context base) {super.attachBaseContext(base);ConfigurationBuilder c = new ConfigurationBuilder(this);c.setFormUri("") // 服务器地址.setMode(ReportingInteractionMode.SILENT) //静默上报.setReportType(HttpSender.Type.JSON).setHttpMethod(HttpSender.Method.POST).setCustomReportContent(new org.acra.ReportField[]{DROPBOX}).setIncludeDropboxSystemTags(true).setDropboxCollectionMinutes(30).setSocketTimeout(60000); //设置超时ACRA.DEV_LOGGING = true;ACRA.init(this, c); //acra初始化}
}
使用此方式可以使用变量,可以根据需求添加变动配置。
接入时记得在AndroidManifest.xml中添加:
<service android:name="org.acra.sender.SenderService"></service>
到此完成以上这两种方式接入后,已经可以使用acra了。
二.acra主动上报:
对于不同的开发需求,我们有时候会有需求要求acra主动上报多少时间段内的报错信息。
这个时候我们可以写个定时器主动触发acra进行上报:
private void setAlarm() {AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);int anhour = 30*60*1000;Intent alarmIntent = new Intent(this, ReportService.class);PendingIntent pendingIntent = PendingIntent.getService(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, java.lang.System.currentTimeMillis(), anhour, pendingIntent);}
使用AlarmManager可以长时间精准计时。
使用pendingIntent开启一个service,该service继承IntentService执行完后会自动销毁。
public class ReportService extends IntentService {public ReportService() {super("ReportService");}@Overridepublic void onCreate() {super.onCreate();}@Overrideprotected void onHandleIntent(Intent intent) {//ACRA主动触发上报,handleSilentException可以自己定义报错,不需要的穿nullACRA.getErrorReporter().handleSilentException(null);}@Overridepublic void onDestroy() {super.onDestroy();}
}
如此联合上面的初始化,就做到了每隔30分钟就会上报一次30分钟内的所有标记报错信息。
三.上报格式(基于我上面初始化的json格式):
ACRA: {"REPORT_ID":"e7395f2a-12eb-4b4d-a4ef-d48f9348381d","STACK_TRACE":"Report requested by developer\n","USER_APP_START_DATE":"2011-12-01T00:00:20.602+08:00","USER_CRASH_DATE":"2021-07-20T10:25:53.167+08:00","DROPBOX":"Tag: system_app_anr\nNothing.\nTag: system_app_wtf\nNothing.\nTag: system_app_crash\nNothing.\nTag: system_server_anr\nNothing.\nTag: system_server_wtf\nNothing.\nTag: system_server_crash\nNothing.\nTag: BATTERY_DISCHARGE_INFO\nNothing.\nTag: SYSTEM_RECOVERY_LOG\nNothing.\nTag: SYSTEM_BOOT\nNothing.\nTag: SYSTEM_LAST_KMSG\nNothing.\nTag: APANIC_CONSOLE\nNothing.\nTag: APANIC_THREADS\nNothing.\nTag: SYSTEM_RESTART\nNothing.\nTag: SYSTEM_TOMBSTONE\nNothing.\nTag: data_app_strictmode\nNothing.\n","IS_SILENT":true}
系统标记事件以tag形式上报,没有则nNothing。
到此就结束了,大部分接口说明官方文档都有,此部分是自己整理分享一下。
Android acra 监控报错日志上报(acra版本4.9)相关推荐
- android.view.InflateException: Binary XML file line(报错日志要从下往上看)
报错日志要从下往上看 今天引入https://github.com/wowhellogo/PageGridView 但是引入不进来,就下载了PageGridView这个类的源码 一运行结果报错,看报错 ...
- JNI 编码中遇到 Fatal signal 11 (SIGSEGV)查看报错日志
2022-09-14 09:19:01.092 3562-3580/com.derry.opengl A/libc: Fatal signal 11 (SIGSEGV), code 1, fault ...
- Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin
Android运行时候报错:android.view.InflateException: Binary XML file line #19: Binary XML file lin 这个问题自己大致在 ...
- 【错误记录】Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. ② | 升级 Gradle 版本 )
文章目录 一.报错信息 二.解决方案 解决 Could not determine java version from '11.0.8'. 问题 , 有两种方案 , 方案一 : Android Stu ...
- 【错误记录】Android Studio 编译报错 ( SDK location not found )
文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : 首次打开别人的项目 , 经常性的报错 ; Could not determine the depende ...
- 【错误记录】Android 应用运行报错 ( You need to use a Theme.AppCompat theme (or descendant) with this activity. )
文章目录 一.报错信息 二.解决方案 一.报错信息 运行 Android 应用时 , 报错 ; 报错信息如下 : 2021-08-04 21:04:12.067 26338-26338/com.exa ...
- 【错误记录】Android Studio 编译报错 ( A problem occurred starting process ‘command ‘ninja.exe‘ ‘ )
文章目录 一.报错信息 二.解决方案 一.报错信息 Android Studio 编译报错 : FAILURE: Build failed with an exception.* What went ...
- php fpm 日志记录,如何解决nginx下php-fpm不记录php报错日志的问题
如何解决nginx下php-fpm不记录php报错日志的问题 发布时间:2020-07-28 10:17:29 来源:亿速云 阅读:150 作者:Leah 本篇文章为大家展示了如何解决nginx下ph ...
- android 编译报错,android avc 编译报错neverallow问题查找
android avc 编译报错neverallow问题查找 2020年08月11日 | 萬仟网移动技术 | 我要评论 在修改avc后,有时候编译会报错neverallow.这个具体是在什么地方定义的 ...
最新文章
- 基于单幅图像一致性学习的弱光视频增强(CVPR2021)
- 常见的面向对象的面试题(附答案)
- JavaScript实现combine With Repetitions结合重复算法(附完整源码)
- python连接数据库mysql错误1045_django 连接数据库出现1045错误的解决方式
- 小程序多个echars_小程序界面与逻辑
- blogCommed
- sqlite 检索的字段结果前加空格_MySQL5.7分词全文检索思路
- Python Selenium 调用IE浏览器失败Unexpected error launching Internet Explorer解决方法
- ubuntn 16.04.2下caffee的安装教程
- 【小白学前端】化腐朽为神奇-Bootstrap实现表单美化(day02-6)
- CentOS7:Ruby安装
- 我爱淘冲刺阶段站立会议每天任务4
- 从汇编的角度理解什么是引用
- 安卓远程连接linux软件,推荐Windows、Linux安卓远程软件
- Go语言学习笔记—golang标准库xml包
- 测试中文编码_如何通过带回家的编码测试
- Altium Designer(AD)多边形铺铜
- 《代码实例》Element-Ui树形菜单和echarts图
- go语言学习笔记(四):调度器基础-爬上那座山
- 算法优化---向量数组计算替代元素级别判断
热门文章
- 利用PyQt5和QSS制作本地音乐播放器(初稿)
- 线性回归模型(简单线性回归、局部线性回归、非线性关系)从理论到Python实现.整理...
- 不要错误使用聚集索引
- [golang] golang实现截取字符串函数SubStr
- 6款实用超火AI工具推荐,ChatGPT,Midjourney ,Notion AI ,Tome ,Descript ,Runway
- 安卓ScrollView向上滑动控件顶部悬浮效果实现
- 货车版“滴滴打车”搬运帮融资5000万 已有6万名司机 服务40万用户
- 真实评测 r7 3700u和i5 8265u哪个好 r73700u和i58265参数对比
- 组装电脑配置推荐5000元左右 2021年5000元电脑最强组装
- 盘点2021上半年电商直播行业发生过的大事