2014-02-12 4 views
57

Google Universal Analytics имеет hit type of exceptionотчета за исключения из Google Analytics analytics.js исключения отслеживания

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

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

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

ответ

92

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

Я сделал свой собственный виджет в приборную панель с 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.

+10

Спасибо за тонну за это. Два года спустя, и это все еще единственная ссылка, я могу найти, как получить эти данные из Analytics. – puzzfuzz

+0

Виджет не отображает опцию «Исключение описания», но настроенный отчет (который в любом случае лучше) работает как шарм. –

+0

Еще три года спустя, и это все еще является лучшим хитом в Google для исключений GA +. Похоже, документация по GA не улучшилась. Благодаря! –

25

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

Мой шаблон: Google Analytics Exceptions Report

+1

Это стало моим любимым отчетом для отслеживания исключений, и я настоятельно рекомендую другим выбрать этот вариант (пока Google Analytics не предоставит встроенный отчет). – GreatBlakes

6

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

  • Убедитесь, что 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!'); 

Edit: Как @Simon_Weaver должным образом отметил, что Google Analytics теперь имеет документацию о отслеживания исключений (который я должен был связан в моем оригинальный ответ - извините, новобранец ошибка!):

0

Simon_Weaver,

Я добавил

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

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

+0

Да, но я ожидал бы больше, чем любое другое событие. –

+0

Убедитесь, что вы изменили диапазон дат в верхней правой части страницы аналитики, чтобы включить сегодняшнюю дату. По умолчанию он подходит только к «вчера». –

+0

Также установите отладчик Chrome для аналитики, чтобы убедиться, что он проходит без ошибок. Вероятно, маловероятно, но если вы не знакомы с этим инструментом, полезно знать об этом. Https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmfdileelhofjcijamephohjechhna?hl=ru –

1

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

Привет, Майкл. У меня есть быстрый вопрос ... Я не уверен в необходимости этой структуры - зачем создавать функцию в качестве второго параметра, а также переходить в окно, а затем возвращать исходную функцию? Похоже, здесь есть 3 лишних шага. Или что-то мне не хватает? – Ryan

Смежные вопросы