Ловіть всі помилки JavaScript і відправляйте їх на сервер


232

Мені було цікаво, чи є у когось досвід поводження з помилками JavaScript у всьому світі та надсилати їх із клієнтського браузера на сервер.

Я думаю, що моя суть є цілком зрозумілою, я хочу знати всі винятки, помилки, помилки компіляції тощо, які трапляються на стороні клієнта, і надсилати їх на сервер, щоб повідомити про них.

В основному я використовую MooTools і head.js(для сторони JS) та Django для серверної сторони.


20
Я не бачу, чому це питання незрозуміле.
Майкл Хілус

3
Проголосували двічі за повторне відкриття питання, але без удачі. Зовсім незрозуміло, чому це питання закрите як незрозуміле.
Мухаммед Усман

7
@ andrew-barber - якщо стільки користувачів вважають це питання достатньо актуальним, щоб підтвердити його, то, можливо, якщо вам незрозуміло, питання з вами ??
isapir

5
Це питання не тільки зрозуміле, але й недооцінене :)
Теоман шипахі

Відповіді:


16

Нещодавно я тестував Sentry на виробництві, і він працює чудово (JS та інші мови, як PHP)

1- Це відкритий код (Ви можете встановити його на власному сервері) 2- Ви можете використовувати безкоштовний план (100 звітів на день)

Або встановіть його на свій сервер: github.com/getsentry


Зауважте, що у них є необмежений безкоштовний план для навчальних закладів
christianvuerings

8
Здається, це вже не є відкритим кодом, усі варіанти оплачуються?
Девід Кампс

4
@DavidCumps Вони все ще пропонують безкоштовну послугу (пробну версію), але ви отримуєте лише 7 днів історії помилок або ви можете встановити її на власному сервері ур з часу її відкритого коду ( github.com/getsentry )
Тарек

1
У Менеджері тегів Google є слухач помилок Javascript, можливо, варто перевірити, особливо якщо ви вже використовуєте GA
Адріан Гунаван

Ви також повинні перевірити TrackJS для цього. Це платний сервіс, але він пропонує багато контексту про те, як користувач потрапив у ситуацію помилок при налагодженні. Я з розробників і виправив з ним тонни помилок :)
Todd Gardner

318

Я б перевірив window.onerror

Приклад:

window.onerror = function(message, url, lineNumber) {  
  //save error and send to server for example.
  return true;
};  

Пам’ятайте, що повернення істини запобіжить запусканню обробника за замовчуванням, а повернення помилкового дозволить оброблювачу за замовчуванням працювати.


9
Ви хочете призначити window.onerror, бажано, перш ніж все інше запуститься. Тож, куди ви хочете поставити, просто переконайтеся, що він працює перед будь-яким іншим кодом / файлами js.
Майк Льюїс

17
Зауважте, Mozilla рекомендує: "Зверніть увагу, що деякі / багато подій помилок не викликають window.eperror, ви повинні спеціально їх слухати."
Адам Нейлор

88
Так, мені подобається, як це говорить багато / багато , дуже описово - дякую Мозіллі.
Даніель Мендель

5
Mozilla виставляє GlobalEventHandlers.onerror: developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…
roland

1
Що станеться, якщо код, який обробляє window.onerror, видає помилку. Чи існує можливість нескінченного циклу?
Мартін Браун

15

Якщо ваш веб-сайт використовує Google Analytics, ви можете робити те, що я роблю:

window.onerror = function(message, source, lineno, colno, error) {
  if (error) message = error.stack;
  ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}

Кілька коментарів до коду вище:

  • Для сучасних браузерів записується повний слід стека.
  • Для старих браузерів, які не фіксують слід стека, натомість записується повідомлення про помилку. (В основному, на моєму досвіді раніше версія iOS).
  • Версія браузера користувача також реєструється, тож ви можете бачити, які версії ОС / браузера видають, які помилки. Це спрощує визначення пріоритетності та тестування помилок.
  • Цей код працює, якщо ви використовуєте Google Analytics із "analytics.js", як це . Якщо ви замість цього використовуєте "gtag.js" , вам потрібно налаштувати останній рядок функції. Детальніше дивіться тут .

Після того, як код встановлений, ви переглядаєте помилки Javascript у своїх користувачів:

  1. У Google Analytics натисніть Behaviorрозділ, а потім Top Eventsзвіт.
  2. Ви отримаєте список категорій подій. Клацніть window.onerrorу списку.
  3. Ви побачите список слідів стека Javascript та повідомлень про помилки. Додайте стовпець до звіту для версій ОС / браузера ваших користувачів, натиснувши Secondary dimensionкнопку та ввівши Event Labelу текстове поле, що з’явиться.
  4. Звіт буде виглядати як скріншот нижче.
  5. Для перекладу рядків ОС / браузера в більш зрозумілі для людини описи я копіюю їх і вставляю на https://developers.whatismybrowser.com/useragents/parse/

введіть тут опис зображення


3
Це не вловлює всіх помилок, а лише пробує блоки, хоча це круто пояснювати, і я не думаю, що ти заслуговуєш нагромадження.
Нік Стіл

Дякую, Нік! Я оновив свою відповідь випробуваним на бою кодом, який добре працює на моєму веб-сайті, і який фіксує всі помилки, не лише ті, з якими ви потрапляєте у спробу ... улов.
Мартін Омандер

2

Не намагайтеся скористатися сторонніми послугами, а спробуйте самостійно.

Обробники помилок можуть знайти нижченаведені сценарії,

  1. Не вдалося схопити TypeError
  2. Uncaught ReferenceError неможливо захопити, наприклад: var.click ()
  3. TypeError можна захопити
  4. Помилка синтаксису може бути захоплена
  5. ReferenceError можна захопити

Ловити помилки Javascript:

window.addEventListener('error', function (e) {
  //It Will handle JS errors 
})

Щоб зафіксувати помилки AngularJS:

app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function ($delegate) {
   return function (exception, cause) {
       //It will handle AngualarJS errors
      }
   })
})

0

Також сервіс http://jslogger.com може допомогти у цьому:

Журнал Помилки Javascript та події у хмарі

з http://jslogger.com/features :

Відтепер ви можете шпигувати за всіма помилками, які порушують користувацький досвід вашого сайту. Кожна помилка Javascript буде виявлена ​​та доведена до вас для подальшої налагодження.

ВІДПОВІДАЛЬНІСТЬ: не пов'язана з послугою / компанією.


1
503 Сервіс недоступний
Rax

0

Ви можете спробувати Atatus - це нова послуга відстеження помилок JavaScript разом із реальним моніторингом користувачів (RUM) для сучасних веб-додатків.

Ми не тільки фіксуємо помилки, але й події користувачів, які викликали помилку. Це дає вам кроки для відтворення помилки в кінці.

Поряд із виявленням помилок ми також фіксуємо час завантаження сторінки та показуємо її в різних точках зору - гео, браузер, розгортання сторінки, гістограма сторінки, моніторинг Ajax та моніторинг транзакцій.

https://www.atatus.com/

Документи доступні: https://www.atatus.com/docs

Відмова: Я веб-розробник Atatus.


1
Я інтегрував Ataus, і тоді я спробував щось на кшталт foo.bar = '', що спричинило виняток. Але я нічого не бачу на інформаційній панелі Atatus.
vmachacek

Не могли б ви залишити нам електронний лист?
Фізер Хан

5
Безсоромна пробка. Оголошення мають бути обмежені правою стороною.
Буде


-2

Ви можете перевірити цю нову послугу http://rescuejs.com/ . https://bugsnag.com/

Дозволяє реєструвати всі ваші помилки javascript без запису коду на стороні сервера. Він також відстежує версії браузера тощо.

Я не впевнений, що вважав би їх на 100% готовими до підприємств, але це обов'язково варто перевірити.


8
Його закрили. Якщо ви спробуєте зареєструватися зараз, ви отримаєте повідомлення "Дякую за ваш інтерес, на жаль, Rescue.js вже не активно працює".
День
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.