Google Analytics自定义异常格式

Google Analytics自定义异常格式

自动配置

可以在xml配置文件中直接配置以下字段,即可开启异常捕获与上传:

<bool name="ga_reportUncaughtExceptions">true</bool>

问题来了

用系统的默认ExceptionParser会有下面2个问题:
1. 格式是按照GA默认的样式
2. 如果开启了混淆,就无法知道那个类文件出问题了

默认格式如下:异常名 (@类名:方法名:行数) {所在线程}

NullPointerException (@c:run:35) {main}

GA默认的异常解析类是StandardExceptionParser,大家可以查看其中的getDescription(Throwable cause, StackTraceElement element, String threadName)方法实现,里面定义了异常的格式。

解决方法

当然就是实现自己的ExceptionParser,并设置为ExceptionReporter内置的解析器,步骤如下:

  • 继承StandardExceptionParser或者自己实现ExceptionParser接口。这里选用继承StandardExceptionParser,因为这个类里面为我们做了很多操作,例如其中里面有个getBestStackTraceElement()函数,他会从Throwable对象中取出最关键的StackTraceElement对象,方便后续进行处理。(注意下面重写了getDescription()3参数的方法,因为2参数那个方法也是调用它)
public class GAExceptionParser extends StandardExceptionParser {
    public GAExceptionParser(Context context) {
        this(context, new ArrayList<String>());
    }
    public GAExceptionParser(Context context, Collection<String> additionalPackages) {
        super(context, additionalPackages);
    }
    @Override
    protected String getDescription(Throwable cause, StackTraceElement element, String threadName) {
        StringBuilder sb = new StringBuilder();
        sb.append(cause.getClass().getSimpleName());
        if (element != null) {
            sb.append(" ");
            sb.append(element.toString());
        }

        if (threadName != null) {
            sb.append(String.format(" {%s}", new Object[]{threadName}));
        }

        return sb.toString();
    }
}
  • 配置ExceptionReporter并将上述GAExceptionParser设置为内置的解析器:
ExceptionReporter gaHandler = new ExceptionReporter(
    mTracker,                                     // Currently used Tracker.
    Thread.getDefaultUncaughtExceptionHandler(),  // Current default uncaught exception handler.
    context);                                    // Context of the application.
gaHandler.setExceptionParser(new GAExceptionParser(context));
// Make our gaHandler to the new default uncaught exception handler.
Thread.setDefaultUncaughtExceptionHandler(gaHandler);
  • 通过上述设置后,奔溃的时候就会按照我们自定义的格式发送到后台服务器中了,修改后在后台看到的格式如下:
NullPointerException com.codezjx.googleanalyticstest.c.run(SecondActivity.java:35) {main}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值