Raport dotyczący wyjątków ze śledzenia wyjątków Google Analytics analytics.js.

82

W Google Universal Analytics występuje wyjątek typu działania

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

Spodziewałem się, że będę mógł po prostu przejść do konsoli Google Analytics i znaleźć raport wyjątków na tym samym poziomie co „zdarzenia”, ale nigdzie go nie widać.

Interfejsy API systemu Android i iOS mówią, Crash and exception data is available primarily in the Crash and Exceptions reportale nie mogę znaleźć żadnego raportu o tej nazwie.

Simon_Weaver
źródło

Odpowiedzi:

129

Domyśliłam się. Nie jestem pewien, dlaczego nie tworzą tego wbudowanego raportu, ale może kiedyś.

Na pulpicie nawigacyjnym utworzyłem niestandardowy widżet zawierający Exception Descriptionwymiar i „Awarie” dla danych:

wprowadź opis obrazu tutaj

Co daje mi taki raport:

wprowadź opis obrazu tutaj

Możesz także przejść do Customizationzakładki i utworzyć raport niestandardowy, aby uzyskać tabelę błędów, a następnie dodać go do pulpitu nawigacyjnego.

wprowadź opis obrazu tutaj

Używany z tym globalnym programem obsługi wyjątków

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

Możesz umieścić ten program obsługi w dowolnym miejscu podczas inicjalizacji Javascript - co będzie zależeć od tego, jak masz skonfigurowane wszystkie pliki JS. Alternatywnie możesz po prostu umieścić go w <script>tagu u góry tagu body HTML.

Simon_Weaver
źródło
3
Wskaźnik „Awarie” nie działał w moim przypadku. Ale ten niestandardowy raport zadziałał imgur.com/a/Ux57LEE Używam gtag
Jayesh
2
Również to nie pojawia się w raporcie w czasie rzeczywistym. Jaka szkoda.
stevemao
5
Och, to pytanie zadano cztery lata temu ... Jeszcze go nie poprawili :(
stevemao
1
W ramach danych Awarie nie pokazywały żadnych danych. Musiałem wybrać Wyjątki.
Pankaj
42

Zapoznałem się z przewodnikiem Simon_Weaver, aby zrobić niestandardowy raport kilka kroków dalej i stworzyłem dość kompletny raport wyjątków niestandardowych Google Analytics. Pomyślałem, że warto się nim podzielić, więc umieściłem go w „Galerii rozwiązań” GA.

Mój szablon: raport o wyjątkach Google Analytics

Oto zdjęcie wyniku końcowego:

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

rwdsco
źródło
3
Ten raport stał się moim ulubionym raportem do śledzenia wyjątków i zdecydowanie polecam innym wybranie tego (do czasu, gdy Google Analytics dostarczy wbudowany raport).
GreatBlakes
Jeśli kiedykolwiek będziesz miał okazję dodać tutaj zrzuty ekranu pokazujące, jak działa Twój szablon, byłoby świetnie.
Simon_Weaver,
@Simon_Weaver Właśnie go wypróbowałem, poszedłem dalej i dodałem, jak to wygląda. Odfiltrowano rzeczywiste opisy wyjątków, ale one się pojawiają. Miejmy nadzieję, że to pomoże
sierpień
7

Chciałem tylko trochę rozwinąć doskonałą odpowiedź @Simon_Weaver, aby dostarczyć raporty o błędach z kilkoma dodatkowymi szczegółami:

  • Upewnij się, że ga()została zdefiniowana przed próbą wywołania (ponieważ błąd może zostać wyzwolony przed załadowaniem biblioteki Analytics).
  • Numery wierszy i indeksy kolumn wyjątków dziennika w raportach Analytics (chociaż zminimalizowany kod JavaScript używany w środowisku produkcyjnym może być trudny do odczytania).
  • Wykonaj wszystkie wcześniej zdefiniowane window.onerrorwywołania zwrotne.
/**
 * 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!');

Edycja: Jak należycie zauważył @Simon_Weaver, Google Analytics ma teraz dokumentację dotyczącą śledzenia wyjątków (do której powinienem dołączyć w mojej oryginalnej odpowiedzi - przepraszam, błąd debiutanta!):

Philippe Sawicki
źródło
idk, czy można umieścić appNamei appVersionw wysyłanym obiekcie wyjątku? Wierzę, że trzeba ustawić te wyraźnie zobaczyć tutaj
sie
1

Oto, co wymyśliłem, więc nie musisz wszędzie umieszczać kodu. Po prostu dodaj new ErrorHandler();do każdego pliku .js. Zrobiono to dla rozszerzenia Chrome, ale myślę, że powinno działać wszędzie. Implementuję rzeczywisty element ga () w osobnym pliku (stąd app.GA), ale możesz go tu też upiec.

/*
 *  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 Updike
źródło
Cześć Michał. Mam szybkie pytanie ... Nie jestem pewien, czy potrzebna jest taka struktura - po co tworzyć funkcję jako drugi parametr i przekazywać okno, a potem zwracać oryginalną funkcję? Wygląda na to, że są tutaj niepotrzebne kroki 3. A może jest coś, czego mi brakuje?
Drenai
0

Możesz teraz znaleźć widok „Awarie i wyjątki” w sekcji Zachowanie (jeśli usługa została utworzona jako „aplikacja mobilna” w Google Analytics).

Menu boczne w Google Analytics od maja 2018 r

ajcurtis
źródło
Nie widzę tego na desce rozdzielczej GA
technomage
@technomage Czy Twoja usługa GA została utworzona jako „witryna internetowa” czy „aplikacja mobilna”?
ajcurtis
Został stworzony jako strona internetowa. W końcu znalazłem surowe dane, ale musiałem stworzyć dla nich niestandardowy raport.
technomage
Informacje o „wyjątkach” wysyłam ręcznie za pomocą javascript GA.
technomage
Ok, to ma sens, dlaczego możesz nie widzieć tego samego widoku. Zrzut ekranu został pobrany z usługi utworzonej jako aplikacja mobilna (również z wyjątkami przesłanymi ręcznie).
ajcurtis