Báo cáo các trường hợp ngoại lệ từ theo dõi ngoại lệ Google Analytics analytics.js


81

Google Universal Analytics có một loại lần truy cập là ngoại lệ

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

Tôi đã mong đợi chỉ có thể truy cập bảng điều khiển Google Analytics và tìm thấy một báo cáo ngoại lệ ở cùng cấp với 'sự kiện' nhưng không thấy đâu.

API Android và iOS cho biết Crash and exception data is available primarily in the Crash and Exceptions reportnhưng tôi không thể tìm thấy bất kỳ báo cáo nào có tên đó.

Câu trả lời:


128

Tìm ra. Tôi không chắc tại sao họ không làm cho báo cáo này được tích hợp sẵn nhưng có thể một ngày nào đó.

Tôi đã tạo một tiện ích con tùy chỉnh trong trang tổng quan với thứ Exception Descriptionnguyên và 'Sự cố' cho chỉ số:

nhập mô tả hình ảnh ở đây

Cho tôi một báo cáo như thế này:

nhập mô tả hình ảnh ở đây

Bạn cũng có thể chuyển đến Customizationtab và tạo báo cáo tùy chỉnh để cung cấp cho bạn một bảng các lỗi, sau đó thêm nó vào trang tổng quan của bạn.

nhập mô tả hình ảnh ở đây

Được sử dụng với trình xử lý ngoại lệ chung này

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

Bạn có thể đặt trình xử lý này ở bất kỳ đâu trong quá trình khởi tạo Javascript - điều này sẽ phụ thuộc vào cách bạn định cấu hình tất cả các tệp JS của mình. Ngoài ra, bạn có thể chỉ cần đặt nó bên trong một <script>thẻ gần đầu thẻ nội dung html của bạn.



2
Chỉ số 'Sự cố' không phù hợp với tôi. Nhưng báo cáo tùy chỉnh này hoạt động imgur.com/a/Ux57LEE Tôi đang sử dụng gtag
Jayesh

2
Ngoài ra, điều này không xuất hiện trong báo cáo thời gian thực. Thật đáng tiếc.
stevemao

5
Oh câu hỏi này đã được hỏi bốn năm trước ... Họ đã không được cải thiện nó chưa :(
stevemao

1
Theo chỉ số, Sự cố không hiển thị bất kỳ dữ liệu nào cho tôi. Tôi đã phải chọn Ngoại lệ.
Pankaj

42

Tôi đã thực hiện hướng dẫn của Simon_Weaver để tạo báo cáo tùy chỉnh thêm một vài bước và xây dựng một báo cáo ngoại lệ tùy chỉnh Google Analytics khá hoàn chỉnh. Tôi nhận thấy nó có thể đáng được chia sẻ, vì vậy tôi đã tải nó lên "Thư viện giải pháp" GA.

Mẫu của tôi: Báo cáo ngoại lệ của Google Analytics

Đây là hình ảnh của kết quả cuối cùng:

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


3
Đây đã trở thành báo cáo yêu thích của tôi để theo dõi ngoại lệ và tôi thực sự khuyên những người khác nên chọn báo cáo này (cho đến khi Google Analytics cung cấp báo cáo tích hợp sẵn).
GreatBlakes

Nếu bạn có cơ hội thêm một số ảnh chụp màn hình vào đây về cách mẫu của bạn hoạt động, điều đó sẽ rất tuyệt.
Simon_Weaver

@Simon_Weaver Tôi vừa thử nó và tiếp tục và thêm nó trông như thế nào. Đã lọc ra các mô tả ngoại lệ thực tế nhưng chúng vẫn hiển thị. Hy vọng rằng sẽ giúp
Tháng Tám

7

Tôi chỉ muốn mở rộng một chút về câu trả lời tuyệt vời của @Simon_Weaver để cung cấp báo cáo lỗi với một số chi tiết bổ sung:

  • Đảm bảo ga()được xác định trước khi cố gắng gọi nó (vì Lỗi có thể được kích hoạt trước khi tải thư viện Analytics).
  • Nhật ký Số dòng ngoại lệ và chỉ mục cột trong Báo cáo Analytics (mặc dù mã JavaScript được rút gọn được sử dụng trong sản xuất có thể khó đọc).
  • Thực thi bất kỳ lệnh window.onerrorgọi lại nào đã xác định trước đó .
/**
 * 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!');

Chỉnh sửa: Như @Simon_Weaver đã lưu ý, Google Analytics hiện có tài liệu về Theo dõi ngoại lệ (tôi nên liên kết đến tài liệu này trong câu trả lời ban đầu của mình - xin lỗi, sai lầm mới!):


idk nếu nó hợp lệ để đặt appNameappVersiontrong đối tượng ngoại lệ bạn gửi? Tôi tin rằng bạn phải thiết lập rõ ràng những điều đó được xem ở đây
Tháng Tám

1

Đây là những gì tôi nghĩ ra, vì vậy bạn không cần phải bao gồm mã ở khắp mọi nơi. Chỉ cần thêm new ErrorHandler();vào mỗi tệp .js. Điều này đã được thực hiện cho một Tiện ích mở rộng của Chrome, nhưng tôi nghĩ sẽ hoạt động ở mọi nơi. Tôi triển khai nội dung ga () thực tế trong một tệp riêng (do đó là app.GA), nhưng bạn cũng có thể nướng nó ở đây.

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

Chào Michael. Tôi có một câu hỏi nhanh ... Tôi không chắc về sự cần thiết của cấu trúc này - tại sao lại tạo hàm dưới dạng tham số thứ hai và truyền vào cửa sổ, rồi trả về hàm ban đầu ?? Có vẻ như có 3 bước không cần thiết ở đây. Hay có điều gì đó tôi đang thiếu?
Drenai

0

Giờ đây, bạn có thể tìm thấy chế độ xem "Sự cố và ngoại lệ" trong Hành vi (nếu thuộc tính được tạo dưới dạng "ứng dụng dành cho thiết bị di động" trong Google Analytics).

Menu bên trong Google Analytics kể từ tháng 5 năm 2018


Tôi không thấy điều này trong bảng điều khiển GA của mình
technomage

@technomage Thuộc tính GA của bạn được tạo dưới dạng "trang web" hay "ứng dụng dành cho thiết bị di động"?
ajcurtis

Nó được tạo ra như một trang web. Cuối cùng tôi đã tìm thấy dữ liệu thô, nhưng tôi phải thiết kế một báo cáo tùy chỉnh cho nó.
technomage

Tôi đang gửi thông tin "ngoại lệ" theo cách thủ công qua GA javascript.
technomage

Ok, đó là lý do tại sao bạn có thể không thấy cùng một chế độ xem. Ảnh chụp màn hình được chụp từ thuộc tính được tạo dưới dạng ứng dụng dành cho thiết bị di động (cũng có ngoại lệ được gửi theo cách thủ công).
ajcurtis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.