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.

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.



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


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!):


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);
                }
            };
        }
    }
}));

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.