Google Analytics v4中的完整堆栈跟踪通过Tag-Manager

时间:2015-03-03 09:08:53

标签: android google-analytics crash-reports google-tag-manager acra

我对crash tracking with Analytics感到有些困惑。 AFIK只能存储在不再超过200字节(每个属性)的Analytics字符串中。因此,不可能看到完整的堆栈跟踪,因为它们通常比200个字符长。

然而,使用Analytics v2 API,可以使用EasyTracker,described here。还有一些半复制使用ga_reportUncaughtExceptions属性,例如:Google Analytics crash report only shows first line of stack traceException stack trace lost in Google Analytics v2 for Android?

由于我使用Tag-Manager,我无法使用这些解决方案,我已经弄清楚如何使用Tag-Manager正确跟踪前200字节的崩溃,但是完整的堆栈跟踪是什么?

我还使用ACRA为用户提供直接联系我们的方式(将堆栈跟踪作为附件),这样就可以停止与Google崩溃记者的直接连接,并且Google Play控制台不显示崩溃。

2 个答案:

答案 0 :(得分:4)

可以在Google Analytics v4中针对Android中所有未捕获的异常发送完整堆栈跟踪。

应用程序类中将自动活动跟踪设置为true。

    // Enable automatic activity tracking for your app
    tracker.enableAutoActivityTracking(true);

进一步覆盖 StandardExceptionParser 类的 getDescription 方法。 Throwable 包含堆栈跟踪元素的数组,如果转换为字符串格式,则将成为您在日志中看到的堆栈跟踪。

    public class AnalyticsExceptionParser extends StandardExceptionParser {

    public AnalyticsExceptionParser(Context context, Collection<String> additionalPackages) {
        super(context, additionalPackages);
    }

    @Override
    protected String getDescription(Throwable cause,
        StackTraceElement element, String threadName) {

        StringBuilder descriptionBuilder = new StringBuilder();
        final Writer writer = new StringWriter();
        final PrintWriter printWriter = new PrintWriter(writer);
        cause.printStackTrace(printWriter);
        descriptionBuilder.append(writer.toString());
        printWriter.close();

        return descriptionBuilder.toString();
    }
}

最后,将 AnalyticsExceptionParser 提供给 ExceptionReporter 的实例。

    public class MyApplication extends Application {

        @Override
        public void onCreate() {
        ...

            ExceptionReporter reporter = new ExceptionReporter(getTracker(), Thread.getDefaultUncaughtExceptionHandler(), this);
            reporter.setExceptionParser(new AnalyticsExceptionParser(this, packages));
            Thread.setDefaultUncaughtExceptionHandler(reporter);
        }
    }

多数民众赞成。在行为&gt;中查看GA控制台上的崩溃报告崩溃和例外

答案 1 :(得分:2)

您可以覆盖主线程使用的ExceptionParser来调整它以报告完整的堆栈跟踪:

final Thread.UncaughtExceptionHandler uncaughtExceptionHandler =
        Thread.getDefaultUncaughtExceptionHandler();
if (uncaughtExceptionHandler instanceof ExceptionReporter) {
    ExceptionReporter exceptionReporter = (ExceptionReporter) uncaughtExceptionHandler;
    exceptionReporter.setExceptionParser(new ExceptionParser() {
        @Override
        public String getDescription(String s, Throwable throwable) {
            return "Thread: " + s + ", Stacktrace: " + ExceptionUtils.getStackTrace(throwable);
        }
    });
}

将其放在实例化Google Analytics实例的位置。我使用的ExceptionUtils类来自apache的common-lang3库。