来自 Google Analytics Analytics.js 异常跟踪的异常报告

谷歌通用分析有一个 命中异常类型

ga('send', 'exception', {
'exDescription': 'DatabaseError'
});

我希望能够只是去谷歌分析控制台,并找到一个异常报告在同一水平的“事件”,但它是无处可见。

Android 和 iOS API 显示的是 Crash and exception data is available primarily in the Crash and Exceptions report,但我找不到任何这个名字的报告。

22440 次浏览

我想明白了,我不知道他们为什么不把这个写进报告里,但也许有一天。

我在仪表板上制作了一个自定义小部件,尺寸为 Exception Description,度量为“崩溃”:

enter image description here

给我一个这样的报告:

enter image description here

您还可以转到 Customization选项卡并创建一个自定义报告,为您提供一个错误表,然后将其添加到仪表板中。

enter image description here

与此全局异常处理程序一起使用

if (typeof window.onerror == "object")
{
window.onerror = function (err, url, line)
{
if (ga)
{
ga('send', 'exception', {
'exDescription': line + " " + err
});
}
};
}

您可以将这个处理程序放在 Javascript 初始化的任何位置-这取决于您如何配置所有 JS 文件。或者你也可以把它放在靠近 html 主体标记顶部的 <script>标记中。

我采用了 Simon _ Weaver 的指南,进一步制作了一个自定义报告,并构建了一个相当完整的 Google Analytics 自定义异常报告。我觉得可能值得分享,所以我把它上传到了 GA 的“解决方案库”。

我的模板: 谷歌分析异常报告

下面是最终结果的图片:

https://imgur.com/a/1UYIzrZ

我只是想对@Simon _ Weaver 的出色回答进行一些扩展,以提供错误报告和一些额外的细节:

  • 在尝试调用它之前确保定义了 ga()(因为在加载 Analytics 库之前可能会触发错误)。
  • 在 Analytics Reports 中记录异常行号和列索引(尽管在生产中使用的小型 JavaScript 代码可能难以阅读)。
  • 执行任何以前定义的 window.onerror回调。
/**
* Send JavaScript error information to Google Analytics.
*
* @param  {Window} window A reference to the "window".
* @return {void}
* @author Philippe Sawicki <https://github.com/philsawicki>
*/
(function (window) {
// Retain a reference to the previous global error handler, in case it has been set:
var originalWindowErrorCallback = window.onerror;


/**
* Log any script error to Google Analytics.
*
* Third-party scripts without CORS will only provide "Script Error." as an error message.
*
* @param  {String}           errorMessage Error message.
* @param  {String}           url          URL where error was raised.
* @param  {Number}           lineNumber   Line number where error was raised.
* @param  {Number|undefined} columnNumber Column number for the line where the error occurred.
* @param  {Object|undefined} errorObject  Error Object.
* @return {Boolean}                       When the function returns true, this prevents the
*                                         firing of the default event handler.
*/
window.onerror = function customErrorHandler (errorMessage, url, lineNumber, columnNumber, errorObject) {
// Send error details to Google Analytics, if the library is already available:
if (typeof ga === 'function') {
// In case the "errorObject" is available, use its data, else fallback
// on the default "errorMessage" provided:
var exceptionDescription = errorMessage;
if (typeof errorObject !== 'undefined' && typeof errorObject.message !== 'undefined') {
exceptionDescription = errorObject.message;
}


// Format the message to log to Analytics (might also use "errorObject.stack" if defined):
exceptionDescription += ' @ ' + url + ':' + lineNumber + ':' + columnNumber;


ga('send', 'exception', {
'exDescription': exceptionDescription,
'exFatal': false, // Some Error types might be considered as fatal.
'appName': 'Application_Name',
'appVersion': '1.0'
});
}


// If the previous "window.onerror" callback can be called, pass it the data:
if (typeof originalWindowErrorCallback === 'function') {
return originalWindowErrorCallback(errorMessage, url, lineNumber, columnNumber, errorObject);
}
// Otherwise, Let the default handler run:
return false;
};
})(window);


// Generate an error, for demonstration purposes:
//throw new Error('Crash!');

编辑: 正如@Simon _ Weaver 适时指出的,Google Analytics 现在有了关于异常跟踪的文档(我应该在我的原始答案中链接到这个文档——抱歉,菜鸟错误!):

这是我想出来的,所以你不需要在任何地方包含代码。只需将 new ErrorHandler();添加到每个。Js 文件。这是针对 Chrome 扩展而做的,但我认为应该可以在任何地方使用。我在一个单独的文件中实现了实际的 ga ()内容(因此使用 app.GA) ,但是您也可以在这里烘焙它。

/*
*  Copyright (c) 2015-2017, Michael A. Updike All rights reserved.
*  Licensed under the BSD-3-Clause
*  https://opensource.org/licenses/BSD-3-Clause
*  https://github.com/opus1269/photo-screen-saver/blob/master/LICENSE.md
*/
// noinspection ThisExpressionReferencesGlobalObjectJS
(function(window, factory) {
window.ExceptionHandler = factory(window);
}(this, function(window) {
'use strict';


return ExceptionHandler;


/**
* Log Exceptions with analytics. Include: new ExceptionHandler();<br />
* at top of every js file
* @constructor
* @alias ExceptionHandler
*/
function ExceptionHandler() {
if (typeof window.onerror === 'object') {
// global error handler
window.onerror = function(message, url, line, col, errObject) {
if (app && app.GA) {
let msg = message;
let stack = null;
if (errObject && errObject.message && errObject.stack) {
msg = errObject.message;
stack = errObject.stack;
}
app.GA.exception(msg, stack);
}
};
}
}
}));

你现在可以在“行为”下找到一个“崩溃和异常”视图(如果属性在 Google 分析中被创建为“移动应用程序”)。

Side menu in Google Analytics as of May 2018