格式化异常消息以包含Google Analytics for Android中的整个堆栈跟踪?

pix*_*xel 10 android google-analytics stack-trace

我想在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();
}
Run Code Online (Sandbox Code Playgroud)

我这样设置:

EasyTracker.getTracker().setExceptionParser(new StacktraceExceptionParser());
Run Code Online (Sandbox Code Playgroud)

gab*_*iel 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();
}
Run Code Online (Sandbox Code Playgroud)

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


Ian*_*ick 6

我知道这个线程已经老了但是我想弄清楚如何使这个工作,但为了完整性,在Log上有一个有用的方法可以做你想要的

String stackTraceStr = Log.getStackTraceString(exception);
Run Code Online (Sandbox Code Playgroud)

编辑:回应100 char限制评论

我永远无法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());
}
Run Code Online (Sandbox Code Playgroud)

这对我有用,并记录超过100个字符.