用来处理android崩溃日志收集的代码,详情的使用请转:android崩溃日志收集和处理

第一个类

/**

* 异常捕捉实现类

*/

public class ErrorCaughtimplements Thread.UncaughtExceptionHandler {
private ErrorHandleerrHandle;
//设置本程序的异常崩溃由此类处理public ErrorCaught(Application context){
Thread.UncaughtExceptionHandler uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
errHandle =new ErrorHandle(context , uncaughtExceptionHandler);
Thread.setDefaultUncaughtExceptionHandler(this);
}
//异常崩溃发生时调用的方法,这里面开始我们想要的操作,包括日志的手机和上传等@Overridepublic void uncaughtException(Thread thread, Throwable throwable) {
errHandle.excute(thread, throwable);
}
}
复制代码

第二个类

/**

* 异常具体处理类

*/

public class ErrorHandle {
private Contextcontext;
private Thread.UncaughtExceptionHandleruncaughtExceptionHandler;
private FilecrashFile;
//新建的时候,随即的开始建造崩溃文件夹和崩溃文件public ErrorHandle(Application context, Thread.UncaughtExceptionHandler uncaughtExceptionHandler) {
this.context = context;
this.uncaughtExceptionHandler = uncaughtExceptionHandler;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
File file =new File(Environment.getExternalStorageDirectory(),"crashCollection");
if (!file.exists()) {
file.mkdirs();//创建崩溃捕捉所在文件夹}
crashFile =new File(file, getCrashFileName());
if (!crashFile.exists()) {
try {
crashFile.createNewFile();//创建崩溃捕捉文件}catch (IOException e) {
e.printStackTrace();
}
}
}
}
//用来执行崩溃时具体的操作public void excute(Thread thread, Throwable throwable) {
CrashInforMationDetail crashInforMationDetail = CrashInforMationDetail.produce(throwable, thread,context);
crashInforMationDetail.writeToFile(crashFile);
signOut(thread, throwable);
}
//强制退出软件public void signOut(Thread thread, Throwable throwable) {
if (uncaughtExceptionHandler !=null) {
uncaughtExceptionHandler.uncaughtException(thread, throwable);
}else {
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
}
//获取崩溃文件名称,具体是年月日组成的文件名private String getCrashFileName() {
StringBuilder stringBuilder =new StringBuilder();
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int date = calendar.get(Calendar.DATE);
stringBuilder.append("crash_");
stringBuilder.append(year +"-");
stringBuilder.append(month +"-");
stringBuilder.append(date);
stringBuilder.append(".txt");
return stringBuilder.toString();
}
}
复制代码

第三个类

/**

* 获取崩溃日志的具体内容,这里做了两个处理,一个是错误信息输入文件,一个是把错误信息变成字符串

*/

public class CrashInforMationDetail {
private static StringcrashInfor;//崩溃日志的具体内容private CrashInforMationDetail() {
}
//获取错误等信息public static CrashInforMationDetail produce(Throwable throwable, Thread thread, Context context) {
ByteArrayOutputStream out =new ByteArrayOutputStream();
PrintStream print =new PrintStream(out);
out.toString();
print.append("crahtime:" + System.currentTimeMillis()).append("\n");
print.append(getSysytemInfor());
print.append("theadName:" + thread.getName() +"\n").append("threadID:" + thread.getId() +"\n");
crashInfor =getSysytemInfor() +"threadName:" + thread.getName() +"\n" +"threadID:" + thread.getId() +"\n" +"ErrorInformation:" + throwable.getMessage();
print.append(throwable.getMessage()).append("\n");
StackTraceElement[] stackTrace = throwable.getStackTrace();
try {
for (int i =0; i < stackTrace.length; i++) {
StackTraceElement stackTraceElement = stackTrace[i];
String trace = stackTraceElement.toString();
print.append(trace +"\n");
crashInfor += trace +"\n";
}
}catch (Exception e) {
e.printStackTrace();
}
Log.d("crashInfor",crashInfor);
throwable.printStackTrace(print);
return new CrashInforMationDetail();
}
//把错误信息填充进崩溃文件中public void writeToFile(File file) {
PrintWriter printer =null;
try {
BufferedOutputStream out =new BufferedOutputStream(new FileOutputStream(file,true));
printer =new PrintWriter(out);
printer.println(crashInfor);
printer.flush();
}catch (IOException e) {
e.printStackTrace();
}finally {
if (printer !=null) {
printer.close();
}
}
}
//获取手机的一些设备参数public static String getSysytemInfor() {
StringBuffer sb =new StringBuffer();
sb.append("主板:" + Build.BOARD +"\n");
sb.append("系统启动程序版本号:" + Build.BOOTLOADER +"\n");
sb.append("系统定制商:" + Build.BRAND +"\n");
sb.append("cpu指令集:" + Build.CPU_ABI +"\n");
sb.append("cpu指令集2:" + Build.CPU_ABI2 +"\n");
sb.append("设置参数:" + Build.DEVICE +"\n");
sb.append("显示屏参数:" + Build.DISPLAY +"\n");
sb.append("无线电固件版本:" + Build.getRadioVersion() +"\n");
sb.append("硬件识别码:" + Build.FINGERPRINT +"\n");
sb.append("硬件名称:" + Build.HARDWARE +"\n");
sb.append("HOST:" + Build.HOST +"\n");
sb.append("修订版本列表:" + Build.ID +"\n");
sb.append("硬件制造商:" + Build.MANUFACTURER +"\n");
sb.append("版本:" + Build.MODEL +"\n");
sb.append("硬件序列号:" + Build.SERIAL +"\n");
sb.append("手机制造商:" + Build.PRODUCT +"\n");
sb.append("描述Build的标签:" + Build.TAGS +"\n");
sb.append("TIME:" + Build.TIME +"\n");
sb.append("builder类型:" + Build.TYPE +"\n");
sb.append("USER:" + Build.USER +"\n");
return sb.toString();
}
public String getString() {
return crashInfor;
}
}复制代码

转载于:https://juejin.im/post/5a5419a3518825732a6d5bca

代码:android崩溃日志收集和处理相关推荐

  1. android崩溃日志收集

    https://blog.csdn.net/wxx_csdn/article/details/79238842 转载于:https://blog.51cto.com/xuguohongai/21289 ...

  2. ios崩溃日志收集_漫谈iOS Crash收集框架

    为了能够第一时间发现程序问题,应用程序需要实现自己的崩溃日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,CrashKit 等.追求方便省心,对于保密性要求不高的程 ...

  3. Android平台日志收集系统

    Android平台日志收集系统 在产品开发测试中以及产品投放到终端客户后,我们经常会遇到各种各样的问题,产品出异常,比较严重的就是使用过程中死机,用户无法操作.对于这种情况,将问题反馈给研发,问题能够 ...

  4. 【Android应用开发】 Android 崩溃日志 本地存储 与 远程保存

    示例代码下载 : http://download.csdn.net/detail/han1202012/8638801; 一. 崩溃日志本地存储 1. 保存原理解析 崩溃信息本地保存步骤 : -- 1 ...

  5. 移动应用崩溃日志收集工具对比

    背景 移动互联网时代,由于 Android 设备的碎片化,客服人员每天要接到很多用户反馈在各种不同机型上的崩溃问题,又没有办法提供具体的 Crash 日志给开发人员.测试人员每天需要对用户的反馈进行 ...

  6. Android Crash日志收集

    概述 在Android应用的开发过程中,总会遇到应用程序Crash.在编码阶段,设备连接到PC,可以在Android Studio的Logcat中可以查看Crash的信息.但是很明显,靠这种方式收集C ...

  7. android 崩溃日志捕获,安卓Java崩溃的捕获和日志记录

    Android的两种崩溃 Android 崩溃分为 Java 崩溃和 Native崩溃两种. Java崩溃的知识点 Java崩溃.png Java崩溃的原因 简单来说,Java崩溃就是在Java代码中 ...

  8. ios崩溃日志收集_iOS崩溃与日志分析

    在iOS开发中经常需要靠记录日志来调试应用程序.解决崩溃问题等,整理常用的日志输出和崩溃日志分析. 最新更新:2018-11-30 基于CocoaLumberjack 的 Swift使用封装库 一.崩 ...

  9. Android崩溃日志框架,崩溃日志上传框架 LogReport

    软件介绍 LogReport是一个崩溃日志上传框架 ,当App崩溃的时,把崩溃信息保存到本地的同时,自动给GitHub提交崩溃issue,你只需要几句,就能完成所有配置,更多细节请了解下方 另外,崩溃 ...

最新文章

  1. 配置apache支持cgi
  2. Effective Java读书笔记完结啦
  3. python登录网站 爬虫_Python爬虫如何使用Cookies登录网站
  4. 李宏毅机器学习(七)GPT的野望
  5. 肖仰华 | 领域知识图谱落地实践中的问题与对策
  6. 暑期训练日志----2018.8.15
  7. php 多维数组怎么表达,php 对多维数组的操作,该怎么解决
  8. java载入器材_JAVA之了解类载入器Classloader
  9. 【Hive】Hive的三种交互方式
  10. [NLP]OpenNLP命名实体识别(NameFinder)的使用
  11. 力扣-83 删除排序链表中的重复元素
  12. [2018.04.29 T3] 矩阵
  13. 集成海康威视Sadp SDK实现设备激活
  14. Java高效实现xml转换json的一种方法
  15. 2019一键清空朋友圈_微信一键删除好友软件(2019微信批量删除好友最快速有效的方法)...
  16. 由旋转矩阵反算旋转角度
  17. Java实现 LeetCode 365 水壶问题
  18. Revit二次开发——常规模型标记随构件旋转
  19. 详解ShellShock 漏洞复现原理,内附ShellShock的修复方法
  20. 轮播图插件--swiper

热门文章

  1. vs2005不能找到ASP.NET网站之郁闷
  2. IT兄弟连 JavaWeb教程 jQuery中其他AJAX支持的函数
  3. React,Redux,React-redux的错综复杂关系
  4. go同一个目录下的go文件里面不能有多个package
  5. MobPush精准把握用户的使用时间
  6. 当城市实现完全自动驾驶,车该怎么开?人该怎么走?
  7. 内部排序——直接插入排序
  8. javascript编程风格
  9. Bada学习-Privileged API
  10. 如何从Silverlight 代码调用Javascript 函数