代码:android崩溃日志收集和处理

    用来处理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);

}

//异常崩溃发生时调用的方法,这里面开始我们想要的操作,包括日志的手机和上传等

    @Override

    public 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;

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容