Подтвердить что ты не робот

Отчет об исключениях из отслеживания исключений Google Analytics analytics.js

Google Universal Analytics имеет тип исключения для удалений

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

Я ожидал, что смогу просто зайти в консоль Google Analytics и найти отчет об исключении на том же уровне, что и "события", однако его нигде не видно.

API Android и iOS говорят Crash and exception data is available primarily in the Crash and Exceptions report, но я не могу найти отчет с этим именем.

4b9b3361

Ответ 1

Выяснил это. Я не уверен, почему они не делают это встроенным отчетом, но, возможно, когда-нибудь.

Я сделал собственный виджет на панели управления с 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. Кроме того, вы можете просто поместить его в тег <script> рядом с тегом тега html.

Ответ 2

Я взял руководство Simon_Weaver для создания пользовательского отчета на несколько шагов дальше и разработал довольно полный отчет об исключениях из Google Analytics. Я полагал, что это может стоить обмена, поэтому я загрузил его в галерею решений GA.

Мой шаблон: Отчет об исключениях для Google Analytics

Ответ 3

Я просто хотел немного расширить на @Simon_Weaver отличный ответ, чтобы предоставить отчеты об ошибках с несколькими дополнительными деталями:

  • Убедитесь, что ga() определен, прежде чем пытаться вызвать его (поскольку ошибка может быть запущена до загрузки библиотеки Google Analytics).
  • Номера строк журнала исключений и индекс столбца в отчетах Analytics (хотя минимальный код 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 теперь есть документация об отслеживании исключений (с которой я должен был ссылаться в своем первоначальном ответе - извините, ошибка новобранец!):

Ответ 4

Это то, что я придумал, поэтому вам не нужно включать код везде. Просто добавьте 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);
                }
            };
        }
    }
}));

Ответ 5

Simon_Weaver,

Я добавил

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

и моя страница также генерирует ошибку, но я не могу видеть ее в отчете об исключениях. Получается ли этот отчет об исключении после добавления в аналитику?