【问题标题】:Format exception message to contain the whole stacktrace in Google Analytics for Android?格式化异常消息以包含 Google Analytics for Android 中的整个堆栈跟踪?
【发布时间】:2012-11-17 17:31:11
【问题描述】:

我想在 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());

【问题讨论】:

  • 似乎没有什么问题,是什么不工作,你能提供更多信息吗?
  • 结果我没有任何完整的堆栈跟踪 - 相反我只有第一行异常。
  • 尝试加入像这篇文章这样建议的内部堆栈跟踪:stackoverflow.com/a/1293282/912851

标签: android google-analytics stack-trace


【解决方案1】:

下面的方法将整个堆栈跟踪合并到一个逗号分隔的行中,如果 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 关于使用错误报告库的评论。我发现它非常有帮助。

【讨论】:

    【解决方案2】:

    我知道这个线程很旧,但我正在尝试弄清楚如何让它工作,但为了完整起见,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 多个字符。

    【讨论】:

    • 不幸的是,正如@Nikolay Elenkow 所说,Google Analytics 中有 100 个字符的限制。我最终使用了 Bugsense。
    • 我已经让它工作了,但没有看到 100 个字符的限制,我至少记录了 1024 个,我将用我的工作方式更新我的答案。
    • 我得到了部分堆栈跟踪。那是在堆栈跟踪中的“由:”之前。在堆栈跟踪中的“引起:”之后无法获取。你能帮帮我吗。在此先感谢
    • @IanWarwick 嗨,我在 onStop 方法中放了异常。我看不到超过 100 个。我看不到整个 logcat 而不是第一行。你能给我发一个演示吗?请给我发电子邮件:mmaidul.islam@gmail.com
    【解决方案3】:

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

    【讨论】:

    • 其实文档中并没有关于限制 sive 的说明。我想使用一个库而不是几个。此外,在新的 Analytics 中,您还具有组合多个异常、设备信息等功能。唯一缺少的是完整的堆栈跟踪。在这种情况下,建议其他选项不是答案:)
    • 文档没有说明限制的事实并不意味着没有限制。然而,我确信 ACRA 和 BugSense 在错误报告方面比 Analytics 更好,后者可以正常工作,但对于分析来说:) 无论您是否解决当前问题,您至少应该考虑它们。
    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2023-01-14
    • 2011-03-29
    • 2011-01-05
    • 1970-01-01
    相关资源
    最近更新 更多