报告Google Analytics(分析).jsexception跟踪的例外情况

Google Universal Analytics有一个点击式的例外

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

我期待着能够访问Google Analytics控制台,并find与“活动”相同级别的免除报告,但无法看到。

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

弄清楚了。 我不知道为什么他们不把这个内置的报告,但也许有一天。

我在仪表板中创build了一个自定义小部件,对于度量标准使用了“ Exception Description ”和“崩溃”

在这里输入图像说明

这给了我一个像这样的报告:

在这里输入图像说明

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

在这里输入图像说明

用于这个全局exception处理程序

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

你可以把这个处理程序放在你的Javascript初始化的任何地方 – 这将取决于你如何configuration所有的JS文件。 或者,你可以把它放在html body标签的顶部附近的<script>标签中。

我利用Simon_Weaver的指导,进一步制作了自定义报告,并构build了一份相当完整的Google Analytics自定义例外报告。 我想这可能是值得分享的,所以我把它上传到GA“解决scheme库”。

我的模板: Google Analytics例外报告

我只是想扩展一下@Simon_Weaver的出色答案,以提供一些额外的细节错误报告:

  • 确保ga()在尝试调用之前被定义(因为在加载Analytics库之前可能会触发错误)。
  • 在Google Analytics报告中loggingexception行号和列索引(尽pipe生产中使用的缩小JavaScript代码可能难以阅读)。
  • 执行任何以前定义的window.onerrorcallback。
 /** * 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正式指出,谷歌分析现在有关于exception跟踪(我应该链接到我原来的答案 – 对不起,菜鸟错误!)的文档:

这是我想出来的,所以你不需要在任何地方包含代码。 只需添加new ErrorHandler(); 到每个.js文件。 这是为Chrome扩展程序完成的,但我应该在任何地方工作。 我在一个单独的文件(因此应用程序.GA)实现实际的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); } }; } } })); 

Simon_Weaver,

我补充说

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

和我的网页也产生错误,但我不能在例外情况报告中看到它。 在添加分析后,此exception报告是否需要花费时间?