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.
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:
Ce qui me donne un rapport comme celui-ci:
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.
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.
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:
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:
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).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!):
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);
}
};
}
}
}));