Android 日志收集原理与实践

导读

Android应用在开发和测试的过程中,如果出现crash,我们一般通过logcat日志信息就可以定位到crash的原因,从而排除BUG。但是如果我们的应用已经发布到了市场上,到时候再发生crash的话,我们想拿到crash的日志信息就很麻烦了,因为我们不可能去跟每一个出现crash的用户来索要crash日志。那怎么办呢?这个时候就需要我们的日志信息收集系统出手了。
最后我会把代码放的Github上面,并生成依赖包供大家使用。如果有特殊需求,也可以自己修改代码去实现。

必要性

应用的日志信息收集系统基本上是每一个应用的标配,它对用户的留存、口碑等都有很大的存在意义。但是当前的大环境导致我们开发人员很少去自己开发这个功能,原因很简单,因为有很多的第三方SDK供我们选择,而且功能齐全。但是做为一名合格的程序员,如果只是伸手而不去创造,那我们迟早也会被淘汰。

开发流程

要想实现这个功能,我们要做的工作基本上就是三个事情:
1)Crash日志的捕获
2)Crash堆栈信息的获取
3)获取到的信息上报

基本原理

本身我们的Android应用程序都是基于Java开发的,所以异常的处理也是沿用的Java异常处理机制。在Java中异常被分为两种:CheckedException 和 UnCheckedException。CheckedException是编译异常,这个一般在我们写代码的时候就已经处理了,所以在这里我们不需要过多关注。UnCheckedException是运行时异常,这个就是我们今天关注的重点。
好的,现在我们知道了要干什么,那要怎么干呢?也就是说要怎么去捕获UnCheckedException的异常呢?好在JavaAPI提供了一个全局捕获异常的处理器,Thread.UncaughtExceptionHandler接口就是我们需要的这个处理器,只要我们实现这个接口并重写其中的uncaughtException方法岂不就可以获取到我们的堆栈信息了么?

开始实现

1.首先我们new moudel ,这样以后不管在哪个项目中使用都可以。这样就很方便了,就算以后升级了,只要对这一个单独的去升级就OK了。
2.new 一个MyUnCheckedExceptionHandler类并实现Thread.UncaughtExceptionHandler接口,然后重写uncaughtException方法。然后在方法内去获取Crash的堆栈信息。

Public class MyUnCheckedExceptionHandler implements Thread.UncaughtExceptionHandler{
   
        @Override
        Public void uncaughtException(Threadt,Throwablee){
            Final Writerresult = new StringWriter();
            Final PrintWriterprintWriter = new PrintWriter(result);

            Throwable cause=e;
            while(null!=cause){
                cause.printStackTrace(printWriter);
                cause=cause.getCause();
            }

            Final StringstacktraceAsString=result.toString();
            printWriter.close();
        }
    }

3.依赖我们的lib,然后再Application中引入。

Public class MyApplication extends Application{
   
        @Override
        publicvoidonCreate(){
            super.onCreate();

            addCrashSystem();
        }
        /*启用日志收集系统*/
        privatevoidaddCrashSystem(){
            Thread.setDefaultUncaughtExceptionHandler(new MyUnCheckedExceptionHandler());
        }
    }

至此,我们的第一步就算完成了,Crash日志已经捕获到了。但是仅仅获取堆栈信息对我们的问题定位和解决还是有点不足,

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值