[基础] Bug日志系统

简介

作为RD最头痛的莫过于没有足够的log来分析和难以复现问题. bug日志系统是非常有必要的。不管是自己搭建还是使用三方

如何自己搭建

搭建平台肯定要考虑:获取log,上传,分析等模块,这里只介绍了Android client端如何入手。

Java提供了一个机制,用来捕获并处理在线程对象中抛出的未检测异常,以避免程序终止
通过Thread的静态内部实例UncaughtExceptionHandler来实现这种机制

Thread源码片段

    private static volatile UncaughtExceptionHandler defaultUncaughtExceptionHandler; 

    public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh) {
         defaultUncaughtExceptionHandler = eh;
     }

    public static UncaughtExceptionHandler getDefaultUncaughtExceptionHandler(){
        return defaultUncaughtExceptionHandler;
    }     

用法

  1. 自定义一个UncaughtExceptionHandler
  2. 通过Thread.setDefaultUncaughtExceptionHandler(this) 指定给所有的Thread
  3. 重载uncaughtException方法 dump exception 或上传,或本地分析
 /**
     * 这个是最关键的函数,当程序中有未被捕获的异常,系统将会自动调用#uncaughtException方法
     * thread为出现未捕获异常的线程,ex为未捕获的异常,有了这个ex,我们就可以得到异常信息。
     */
    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
        try {
            //导出异常信息到SD卡中
            dumpExceptionToSDCard(ex);
            uploadExceptionToServer();
            //这里可以通过网络上传异常信息到服务器,便于开发人员分析日志从而解决bug
        } catch (IOException e) {
            e.printStackTrace();
        }

        ex.printStackTrace();

        //如果系统提供了默认的异常处理器,则交给系统去结束我们的程序,否则就由我们自己结束自己
        if (mDefaultCrashHandler != null) {
            mDefaultCrashHandler.uncaughtException(thread, ex);
        } else {
            Process.killProcess(Process.myPid());
        }

    }

这里有Android开发艺术探索上提到的示例CrashHandler可以参看

当然自己写轮子,还要考虑合理埋点,如何抓取更详细的dump, trace等

三方资源

自己写平台统计,分析成本太高(海量数据,人力消耗蛮大的)
如果是公司有这方便的需求,但是有成本考量建议使用现有的应用崩溃检测平台

  • 腾讯Bugly,开源部分功能免费
  • 阿里的Testin云测试平台
  • 友盟 集成测试
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值