我对crash tracking with Analytics有点迷惑。AFIK只能在Analytics中存储不再超过200字节的字符串(每个属性)。因此,不可能看到完整的堆栈跟踪,因为它们通常比200个字符要长得多。
然而,使用Analytics v2应用编程接口,这可以通过EasyTracker实现,就像described here。还有一些使用ga_reportUncaughtExceptions属性的半复制文件:Google Analytics crash report only shows first line of stack trace或Exception stack trace lost in Google Analytics v2 for Android?
因为我使用Tag-Manager,所以我不能使用这些解决方案,我已经知道如何使用Tag-Manager正确跟踪前200字节的崩溃,但是完整堆栈跟踪是什么呢?
我还使用ACRA为用户提供了一种直接联系我们的方法(使用堆栈跟踪作为附件),因此与Google crash reporter的直接连接将被停止,Google Play控制台也不会显示崩溃。
发布于 2015-05-25 19:25:45
对于安卓中所有未捕获的异常,都可以在谷歌分析v4中发送完整的堆栈跟踪。
在Application类中将自动活动跟踪设置为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);
}
}就是这样。在GA控制台上的Behavior > crash and Exception中查看崩溃报告。
发布于 2015-03-19 20:40:08
您可以覆盖主线程使用的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库。
https://stackoverflow.com/questions/28827838
复制相似问题