web-dev-qa-db-fra.com

Rapport sur les exceptions du suivi des exceptions de Google Analytics analytics.js

Google Universal Analytics a un type d'exception hit

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

Je m'attendais à pouvoir accéder à la console Google Analytics et à trouver un rapport d'exception au même niveau que "événements", mais il est introuvable.

Les API Android et iOS indiquent Crash and exception data is available primarily in the Crash and Exceptions report, mais je ne trouve aucun rapport portant ce nom.

69
Simon_Weaver

Deviner. Je ne sais pas pourquoi ils n'en font pas un rapport intégré, mais peut-être un jour.

J'ai créé un widget personnalisé dans un tableau de bord avec Exception Description pour la dimension et 'Crashes' pour la métrique:

enter image description here

Ce qui me donne un rapport comme celui-ci:

enter image description here

Vous pouvez également accéder à l'onglet Customization et créer un rapport personnalisé pour vous fournir un tableau des erreurs, puis l'ajouter à votre tableau de bord.

enter image description here

Utilisé avec ce gestionnaire d'exception global

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

Vous pouvez mettre ce gestionnaire n'importe où dans l'initialisation de votre Javascript - cela dépendra de la configuration de tous vos fichiers JS. Sinon, vous pouvez simplement le mettre dans une balise <script> située en haut de votre balise html body.

110
Simon_Weaver

J'ai suivi le guide de Simon_Weaver pour créer un rapport personnalisé quelques étapes plus loin et j'ai élaboré un rapport d'exceptions personnalisées assez complet pour Google Analytics. Je pensais que cela valait la peine d'être partagé, alors je l'ai téléchargé dans GA "Solutions Gallery". 

Mon modèle: Rapport d'exceptions de Google Analytics

Voici une photo du résultat final:

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

36
rwdsco

Je voulais juste développer un peu l'excellente réponse de @Simon_Weaver afin de fournir des rapports d'erreur avec quelques détails supplémentaires: 

  • Assurez-vous que ga() est défini avant d'essayer de l'appeler (une erreur pourrait être déclenchée avant le chargement de la bibliothèque Analytics).
  • Consignez les numéros de ligne d'exception et l'index des colonnes dans les rapports Analytics (bien que le code JavaScript simplifié utilisé en production puisse être difficile à lire).
  • Exécutez tout rappel window.onerror défini précédemment.
/**
 * 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!');

Edit: Comme @Simon_Weaver l’a bien noté, Google Analytics dispose désormais de documentation sur le suivi des exceptions (à laquelle je devrais me connecter dans ma réponse originale - pardon, erreur de recrue!):

6
Philippe Sawicki

C’est ce que j’ai proposé, vous n’avez donc pas besoin d’inclure le code partout. Ajoutez simplement new ErrorHandler(); à chaque fichier .js. Cela a été fait pour une extension Chrome, mais devrait fonctionner n'importe où, je pense. J'implémente le contenu ga () dans un fichier séparé (d'où l'app.GA), mais vous pouvez le faire ici aussi.

/*
 *  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);
                }
            };
        }
    }
}));
1
Michael Updike

Vous pouvez maintenant trouver une vue "Crashes et exceptions" sous Comportement (si la propriété est créée en tant qu '"application mobile" dans Google Analytics). 

 Side menu in Google Analytics as of May 2018

0
ajcurtis