2012-06-29 5 views
17

Мой проект, который содержит много страниц с формами. Это база банковской системы CRM, поэтому любая ошибка во время рабочего процесса должна быть зафиксирована и исследована. На стороне сервера у нас есть усовершенствованная система исключений java, но если ошибка возникает на стороне клиента - javascript, то единственная информация, которую мы теперь получаем, - это окно js-error в IE или иногда скриншот страницы, сделанный продвинутым пользователем.Ошибка регистрации javascript на стороне клиента

Javascript-код содержит как пользовательские расширения интерфейса JQuery, так и встроенные обработчики и функции встроенного события.

Так что я спрашиваю, можно ли использовать какой-либо подход для захвата js-ошибок любого рода? какая-то дополнительная библиотека или что-то, что могло бы дать мне стек, как firebug в Mozilla или веб-консоль в Chrome?

+2

обратитесь по этой ссылке: http://openmymind.net/2012/4/4/You-Really-Should-Log-Client-Side-Error/ –

+0

Спасибо Тамилу и Александру, но в моем случае я могу " t использовать аутсорсинг и находиться не внутри моих сетевых сервисов – shershen

+0

Я не пробовал это самостоятельно, но такие решения могут быть интересными: https://www.proxino.com/ –

ответ

24

Посмотрите на window.onerror. Если вы хотите зафиксировать какие-либо ошибки и сообщить о них на сервер, возможно, вы можете попробовать запрос AJAX.

window.onerror = function(errorMessage, errorUrl, errorLine) { 
    jQuery.ajax({ 
     type: 'POST', 
     url: 'jserror.jsf', 
     data: { 
      msg: errorMessage, 
      url: errorUrl, 
      line: errorLine 
     }, 
     success: function() { 
      if (console && console.log) { 
       console.log('JS error report successful.'); 
      } 
     }, 
     error: function() { 
      if (console && console.error) { 
       console.error('JS error report submission failed!'); 
      } 
     } 
    }); 

    // Prevent firing of default error handler. 
    return true; 
} 
+7

Вам следует добавить функцию дросселирования. Если клиент попадает в цикл, который генерирует ошибки, клиенты быстро дойдут до вашей конечной точки ведения журнала. Проверьте этот репо на отличный пример. https://github.com/TrackJs/Tech-Demo –

+0

dataType: «json» – 0fnt

+0

contentType должно быть «application/json» – Kildareflare

2

Если вы хотите сделать безболезненную реализацию просто поставить this парней Javascript код в вашем приложении. Else Если вы хотите его реализовать, попробуйте this, чтобы получить stacktrace на windowerror, и вы можете использовать ajax для сообщения об ошибках. A nice way для отслеживания ошибок, о которых сообщает olark

2

http://exceptionhub.com Должно к фокусу. http://errorception.com/ Не предоставляет столько информации для отладки, но также кажется приятным.

proxino, похоже, не знает, что они делают, они, где вносят полный jQuery в свой код регистратора, чтобы регистрировать события onerror в последний раз, когда я проверял. Я бы не стал доверять службе, которая так мало разбирается в JavaScript на стороне клиента, чтобы регистрировать мои ошибки JavaScript.

+1

Стоит отметить, что Proxino также имеет версию сценария, не содержащую jQuery, хотя вам все равно требуется загрузить jQuery на вашу страницу. https://www.proxino.com/documentation –

1

Я рекомендую использовать JsLog.me Service

Это может захватить весь консольный вывод в дополнение к ошибкам и stacktraces. Мы используем его в наших проектах, регистрация журнала всей консоли помогает нашей команде контроля качества записывать способ воспроизведения проблем. Кроме того, он хорошо работает с большими объектами JSON, например, в консоли Chrome, и имеет поиск.

12

Отказ от ответственности: Я являюсь генеральным директором и создателем Sentry, с открытым исходным кодом и платной услугой, которая создает отчеты о сбоях для многих языков, включая Javascript.

Это может быть довольно сложно уловить исключения в интерфейсе. Технология стала лучше (браузерные JS-двигатели), но все еще есть много ограничений.

  1. Вам понадобится конечная точка регистрации на стороне сервера. Это имеет несколько сложностей, так как можно злоупотреблять им (т. Е. Тестеры PEN могут попытаться выявить в нем уязвимости). Вам также нужно иметь дело с CORS здесь. Я бы рекомендовал Sentry для этого, так как мы лучше всего в классе, и если вы хотите, вы можете разместить сервер самостоятельно (как его открытый исходный код).
  2. Реализация фактического захвата ошибок в коде довольно сложна. Вы не можете полагаться на window.onerror по разным причинам (главным образом потому, что браузеры исторически дают плохую информацию здесь). То, что мы делаем в клиенте raven.js (на основе TraceKit), является патчем для ряда функций для их переноса в операторы try/catch. Например, window.setTimeout.С этим мы можем установить обработчики ошибок, которые будут генерировать полные стеки в большинстве браузеров.
  3. Вы хотите убедиться, что вы генерируете исходные коды для своего кода и что сервер, обрабатывающий данные, поддерживает их. Sentry делает это, читая их автоматически (по стандартам) или позволяя загружать их через API. Без этого, предполагая, что вы уменьшаете код, все становится практически непригодным.
  4. Последней главной проблемой является шум. Большинство расширений браузера будут вставляться непосредственно в ваши сценарии, поэтому вам необходимо отфильтровать шум. Мы решаем это двумя способами: черный список шаблонов для игнорирования (т. Е. «Ошибка скрипта», являющийся самым бесполезным), а также белый список доменов, принимаемых (то есть «example.com»). Мы обнаружили, что сочетание двух из них является достаточно эффективным для удаления большинства случайных шумов.

Некоторые вещи, которые вы должны знать на сервере:

  • Клиенты иногда сохраняются открытые (т.е. бот, или плохой пользователя) и вызвать большое количество ненужных данных или простых старых ошибок.
  • Ваш сервер должен иметь возможность обрабатывать каскад этих событий и изящно терпеть неудачу. Sentry делает это путем ограничения скорости и данных выборки.
  • Исключения локализованы на языке браузера, и без централизованной базы данных вы будете зацикливаться, переведя их самостоятельно (хотя в целом они очевидны, что они означают).
1

Atatus фиксирует ошибки JavaScript, а также фиксирует действия пользователя, предшествующие этой ошибке. Это поможет лучше понять ошибку. Atatus поможет вам в наблюдении за свой внешний интерфейс, а не только на наличие ошибок, но и его производительность (Real Monitoring User)

https://www.atatus.com/

Отказ от ответственности: Я веб-разработчик в Atatus.

Смежные вопросы