gluck59
@gluck59
Виртуальный глюк

Как отправить лог консоли браузера посетителя разработчику?

Имеется веб-приложение на JS со всеми причитающимися причиндалами: AppCache, WebSQL и все такое. Не самое сложное, строк этак на пару-тройку тысяч.

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

Как бы сделать так, чтобы лог консоли за последние Х минут отправлялся разработчикам, когда юзер нажмет на специальную кнопку?
Или еще лучше: отправлялось только то, что разработчики укажут заранее: потенциально проблемные места, непойманные ошибки итд?

Интересуют только mobile Safari и mobile Chrome, другие браузеры не нужны.
  • Вопрос задан
  • 3353 просмотра
Пригласить эксперта
Ответы на вопрос 3
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Не знаю как отправить лог по нажатию кнопки, да и если ошибка критическая, то вполне вероятно, что js на странице уже не работает и никакие нажатия на кнопку обработаны не будут. Я перехватывю и логирую на бэкенде все ошибки фронтенда. Раньше всех скриптов подключить на странице это https://github.com/darcyclarke/Detect.js и это

window.onerror = function(err, url, line, col, msg) {
    var data = {
        'Error': err,
        'URL': url,
        'Line': line,
        'Column': null,
        'Message': null,
        'Browser': null,
        'OS': null,
        'Device': null
    };

    // HTML5 only
    data['Column'] = !col ? '' : col;
    data['Message'] = !msg ? '' : msg;

    try {
        var ua = detect.parse(navigator.userAgent); 
        data['Browser'] = !ua.browser.name ? '' : ua.browser.name;
        data['OS'] = !ua.os.name ? '' : ua.os.name;
        data['Device'] = !ua.device.name ? '' : ua.device.name;
    }
    catch(e) {}

    console.groupCollapsed('Error: ' + data['Error']);
    console.log('URL: ' + data['URL']);
    console.log('Line: ' + data['Line']);
    if(data['Column'])
        console.log('Column: ' + data['Column']);
    if(data['Message'])
        console.log('Message: ' + data['Message']);
    console.groupEnd();

    try {
        $.post('/frontend/error/', data);
    }
    catch(e) {}

    return true; //suppressErrorAlert
};


а на сервере настроить обработчик, сохраняющий полученные ошибки в файл.
Ответ написан
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
В вашем случае можно только переопределить объект console и помимо вывода на консоль записывать строки ещё в массив, а при нажатии кнопки этот массив отправлять на сервер.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
10 мая 2024, в 18:22
8000 руб./за проект
10 мая 2024, в 18:16
30000 руб./за проект
10 мая 2024, в 18:07
20000 руб./за проект