谷歌分析analytics.js异常跟踪的例外报告

83

Google通用分析工具具有异常的命中类型(hit type of exception)

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

我本以为可以直接进入Google Analytics控制台,在与“事件”同级别处找到“异常报告”,但是却没有找到。

Android和iOS API表示,“崩溃和异常数据主要在崩溃和异常报告中可用”,但我找不到任何名为该名称的报告。

5个回答

134
我明白了。我不确定为什么他们不把这个做成内置报告,但或许有一天会这样做。我在仪表板上创建了一个自定义小部件,将“异常描述”作为维度,“崩溃”作为指标:enter image description here 这给我提供了这样的报告:enter image description here 您也可以转到“定制”选项卡并创建自定义报告,以便向您提供错误表格,然后将其添加到您的仪表板中。 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 body标记顶部附近的<script>标记内。


小部件没有显示任何“异常描述”选项,但自定义报告(无论如何都更好)运行得很好。 - Ken Sharp
2
gtag.js 是什么? https://developers.google.com/analytics/devguides/collection/gtagjs/exceptions?hl=es-419 - PreguntonCojoneroCabrón
3
“崩溃”这个指标对我没用,但是这份自定义报告很有效 https://imgur.com/a/Ux57LEE。我正在使用gtag。 - Jayesh
3
这也没有出现在实时报告中,真遗憾。 - stevemao
5
哦,这个问题是四年前提出的……他们到现在还没有改进它 :( - stevemao
1
在指标下,我的Crashes没有显示任何数据。我不得不选择Exceptions。 - Pankaj

44

我参考了Simon_Weaver的指南,进一步建立了一个相当完整的Google Analytics自定义异常报告。我认为这可能值得分享,所以我将它上传到GA“解决方案画廊”。

我的模板: Google Analytics异常报告

这是最终结果的图片:

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


3
这已经成为我跟踪异常的最喜爱报告了,我强烈推荐其他人选择它(直到Google Analytics提供内置报告)。 - GreatBlakes
1
如果您有机会在此处添加一些模板运行截图,那将是非常好的。 - Simon_Weaver
@Simon_Weaver 我刚试了一下,然后添加了它的外观。过滤掉了实际的异常描述,但它们确实显示出来了。希望这有所帮助。 - aug
1
这个链接对我来说无效 - 它只会导航到通用的 Google 营销平台网站。 - RocketMan
您可以在此处搜索GA报告:https://analytics.google.com/analytics/gallery/ - Andrew Dyster

7

我想对@Simon_Weaver的优秀答案进行补充,提供一些关于错误报告的额外细节:

  • 确保在调用ga()之前定义它(因为在加载分析库之前可能会触发错误)。
  • 在分析报告中记录异常行号和列索引(尽管在生产中使用的缩小的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现在有关于异常追踪的文档(我在原始答案中应该已经链接了--抱歉,新手错误!):


不确定在发送异常对象时是否将appNameappVersion放入其中是有效的?我认为您必须明确设置这些内容,请参见此处 - aug

1
这是我想出来的方法,让你不必在每个.js文件中都包含代码。只需在每个文件中添加new ErrorHandler();即可。这是为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);
                }
            };
        }
    }
}));

嗨,Michael。我有一个快速问题......我不确定需要这个结构吗 - 为什么将函数创建为第二个参数,并传入窗口,然后返回原始函数?? 这里似乎有3个不必要的步骤。或者我漏掉了什么? - Drenai

0
现在,如果在Google Analytics中将属性创建为“移动应用程序”,则可以在行为下找到“崩溃和异常”视图。

Side menu in Google Analytics as of May 2018


我在我的GA仪表板上没有看到这个。 - technomage
@technomage 您的 GA 属性是作为“网站”还是“移动应用程序”创建的? - ajcurtis
它最初是作为一个网站创建的。最终我找到了原始数据,但我必须为之制作一个定制报告。 - technomage
我正在通过GA JavaScript手动发送“异常”信息。 - technomage
好的,这就解释了为什么你可能看不到相同的视图。屏幕截图是从一个创建为移动应用程序的属性中获取的(也手动发送了异常)。 - ajcurtis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接