10

我想在 Google Analytic 的报告中为我的移动应用程序提供整个堆栈跟踪。

我编写了打印堆栈跟踪的类并将其放入字符串中,但它不起作用。

我的习惯ExceptionParser

@Override
public String getDescription(String threadName, Throwable throwable) {
    return threadName + " " + getStackTrace(throwable);
}

private String getStackTrace(Throwable throwable) {
    final Writer result = new StringWriter();
    final PrintWriter printWriter = new PrintWriter(result);
    throwable.printStackTrace(printWriter);

    return result.toString();
}

我这样设置:

EasyTracker.getTracker().setExceptionParser(new StacktraceExceptionParser());
4

3 回答 3

6

下面的方法将整个堆栈跟踪合并到一个逗号分隔的行中,如果 Analytics 只返回第一行,这可能会有所帮助。但是仍然可能有长度限制,因此进行过滤以消除您不需要的项目可能是谨慎的(见评论)

 public String getCombinedStackTrace(Throwable aThrowable) {

    final StringBuilder result = new StringBuilder();
    result.append(aThrowable.toString());
    result.append(',');

    String oneElement;

    for (StackTraceElement element : aThrowable.getStackTrace() ) {
        // you can do some filtering here, selecting only the elements you need
        oneElement = element.toString();
        result.append( oneElement );
        result.append( ",");
    }
    return result.toString();
}

我赞同 Nikolay 关于使用错误报告库的评论。我发现它非常有帮助。

于 2012-12-08T04:56:39.303 回答
6

我知道这个线程很旧,但我试图弄清楚如何让它工作,但为了完整起见,Log 上有一个有用的方法可以满足你的需求

String stackTraceStr = Log.getStackTraceString(exception);

编辑:响应 100 字符限制评论

我永远无法EasyTracker.getTracker().setExceptionParser(...)工作,事实上我认为它不起作用,所以我在这里关注了博客文章http://dandar3.blogspot.co.uk/2013/03/google-analytics-easytracker-detailed.html

博客文章中的重点是确保在 GA 异常处理程序上设置 ExceptionParser:

// Make sure you set the context on EasyTracker first
EasyTracker.getInstance().setContext(this);

// As in in the blog post, we have to get the ExceptionReporter
// in order to set the ExceptionParser
Thread.UncaughtExceptionHandler uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
if (uncaughtExceptionHandler instanceof ExceptionReporter) {
  ExceptionReporter exceptionReporter = (ExceptionReporter) uncaughtExceptionHandler;
  exceptionReporter.setExceptionParser(new AnalyticsExceptionParser());
}

这对我有用并记录了 100 多个字符。

于 2013-04-04T10:34:11.683 回答
4

分析可能会限制您可以发送的消息的大小。我建议改用ACRABugSense等真正的错误报告库。您将获得额外的功能,例如设备信息、配置详细信息和更好的错误报告(如果它们具有相同的跟踪,则组合多个异常等)。

于 2012-12-05T08:56:44.683 回答