报告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.onerror
callback。
/** * 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报告是否需要花费时间?
- 如何在Java中使用reflection来实例化内部类?
- 为什么编译器检查C ++中的exception?
- 在Python中相当于e.printStackTrace
- android.mk arm-linux-androideabi-g ++exception和__cxa_allocate_exception
- Node.js最佳实践exception处理
- exception处理:抛出,抛出和Throwable
- 即使你抛出一个新的exception,finally块是否会运行?
- 如何将traceback / sys.exc_info()值保存在variables中?
- Visual Studio 2015中断未处理的exception不起作用