Регистрация ошибок клиентского JavaScript на сервере

У меня есть сайт ASP.NET, на котором у меня возникают проблемы с поиском некоторых ошибок JavaScript только при ручном тестировании.

Есть ли возможность поймать все ошибки JavaScript на стороне клиента и зарегистрировать их на сервере, то есть в журнале событий (через веб-сервис или что-то в этом роде)?

Проблема, по которой мы не используем JavaScript UnitTesting, заключается в том, что слишком много людей вносят свой вклад в Сайт / Контент и используют JavaScript. Контент - это не то, о чем мы (как разработчики) должны заботиться, но в коде есть ошибки. Так что общее решение было бы лучше.

MADMap 23.09.2008 10:50

Я предполагаю, что вы не имеете в виду, что средний пользователь внес вклад (иначе это XSS-дыра) ... но ... вы могли бы изолировать их JS в try / catch, чтобы это, по крайней мере, не повлияло на ваш собственный JS ... не зная динамика сайта, не знаю, поможет это или нет ...

Mike Stone 23.09.2008 11:06

Контент поступает от других команд в Компании, а не от пользователей, поэтому это не представляет угрозы для безопасности.

MADMap 23.09.2008 12:41
Bugsnag will automatically log your errors & show them in a dashboard. Works for .NET & JS.
Don P 06.12.2017 23:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
101
4
47 624
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

Вы потенциально можете сделать Ajax-вызов сервера из try / catch, но, вероятно, это лучшее, что вы можете сделать.

Могу я предложить вместо этого модульное тестирование JavaScript? Возможно с JSUnit?

Проблема, по которой мы не используем JavaScript UnitTesting, заключается в том, что слишком много людей вносят свой вклад в Сайт / Контент, и они используют JavaScript (но понятия не имеют об этом!), Поэтому общее решение было бы лучше.

MADMap 23.09.2008 10:48
Ответ принят как подходящий

Вы можете попробовать настроить свой собственный обработчик для событие onerror и использовать XMLHttpRequest, чтобы сообщить серверу, что пошло не так, однако, поскольку он не является частью какой-либо спецификации, поддержка несколько ненадежная.

Вот пример из Использование XMLHttpRequest для регистрации ошибок JavaScript:

window.onerror = function(msg, url, line)
{
  var req = new XMLHttpRequest();
  var params = "msg = " + encodeURIComponent(msg) + '&url=' + encodeURIComponent(url) + "&line = " + line;
  req.open("POST", "/scripts/logerror.php");
  req.send(params);
};

Я только что выпустил серверный элемент управления, который поможет вам сделать это на thecodepage.com/post/JavaScript-Error-Notifications.aspx

Gabriel McAdams 02.02.2010 21:59

Будет ли он бесконечно зацикливаться, если произойдет сбой в обработчике?

Jean-Philippe Leclerc 30.01.2013 06:56

@ Жан-Филипп Леклерк: Да. И что еще хуже, это приведет к DoS-атаке на конечную точку вашего сервера, если вы когда-нибудь попадете в цикл ошибок. Вы должны добавить к этому функцию дросселирования, чтобы предотвратить слишком быстрое обращение клиента к серверу. Вот пример этого из {Track: js} github.com/TrackJs/Tech-Demo/blob/master/src/TrackJs.Demo/…

Todd Gardner 29.10.2013 00:33

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

mormegil 07.03.2014 03:09

Эта штука может перегрузить ваш сервер, например. если вы получаете ошибку в методе setInterval. В Интернете доступно множество сервисов отчетов об ошибках JS. Оформить заказ ErrLytics. Он также дает вам аналитику каждого действия пользователя на вашем веб-сайте.

Vivek Marakana 09.05.2016 07:49

Существуют ли риски безопасности, связанные с вызовом ajax, который (вероятно) будет записывать на диск любое полученное сообщение? Я могу вспомнить атаку Министерства обороны, заполняющую жесткий диск или замедляющую его реакцию ... Как бы вы от этого защитились?

FercoCQ 10.10.2017 21:10

Также рекомендую использовать утилиту TraceTool, она поддерживает JavaScript и очень удобна для мониторинга JS.

TraceTool is dead?
Kiquenet 24.11.2015 01:37

Если вы хотите записывать ошибки на стороне клиента обратно на сервер, вам придется выполнить какую-то обработку сервера. Лучше всего иметь веб-службу, к которой вы можете получить доступ через JavaScript (AJAX), и вы передадите ей информацию из журнала ошибок.

Не решает проблему на 100%, потому что если проблема связана с веб-сервером, на котором размещена веб-служба, у вас проблемы, другим вариантом будет отправка информации через стандартную страницу через строку запроса. это делается посредством динамической генерации тегов изображений (которые затем удаляются), когда браузер попытается загрузить источник изображения. Тем не менее, он прекрасно обходит междоменные вызовы JavaScript. Имейте в виду, что у вас проблемы, если у кого-то отключены изображения;)

Я только что реализовал регистрацию ошибок на стороне сервера при ошибках javascript в рабочем проекте. Это смесь старого кода и нового кода, использующего jQuery.

Я использую комбинацию window.onerror и обертываю обработчики событий jQuery и функцию onready функцией обработки ошибок (см. Отслеживание ошибок JavaScript: почему window.onerror недостаточно).

  • window.onerror: перехватывает все ошибки в IE (и большинство ошибок в Firefox), но ничего не делает в Safari и Opera.
  • Обработчики событий jQuery: перехватывают ошибки событий jQuery во всех браузерах.
  • Функция готовности jQuery: обнаруживает ошибки инициализации во всех браузерах.

Как только я обнаружил ошибку, я добавляю к ней дополнительные свойства (URL, браузер и т. д.), А затем отправляю их обратно на сервер с помощью вызова ajax.

На сервере у меня есть небольшая страница, которая просто принимает опубликованные аргументы и выводит их в нашу обычную структуру ведения журнала сервера.

Я хотел бы открыть исходный код для этого (как плагин jQuery). Если кому интересно, дайте знать, это поможет убедить начальство!

Есть ли шанс, что этот код будет доступен?

Luke 09.09.2010 14:49

К сожалению, нет :(, так как я больше не работаю в компании, в которой я создал этот код. Но это было всего около 100 строк кода, и его должно быть достаточно легко воссоздать из деталей выше.

Karl 14.09.2010 12:58

вот тут ребята: webcache.googleusercontent.com/…

Devin Rhode 07.08.2011 10:22

Я пробовал это, но сохранение jquery в зависимости - это боль, а window.onerror отстой для минимизированного кода и javascript, который обслуживается через cdns

Ankur Agarwal 28.08.2013 17:52

Короткий ответ: Да, это возможно.

Более длинный ответ: Люди уже писали о том, как можно (хотя бы частично) решить эту проблему, написав собственный код. Однако обратите внимание, что существуют службы, которые, похоже, убедились, что необходимый код JS работает во многих браузерах. Я нашел следующее:

Я не могу говорить ни об одной из этих услуг, так как еще не пробовал их.

Зарегистрировано на muscula.com. Сервис выглядит очень интересно, его легко интегрировать и использовать. Существует также библиотека JavaScript github.com/csnover/TraceKit, которая позволяет получать информацию об исключении от клиента, но вам необходимо разработать свой собственный механизм входа на стороне сервера. Интересно, можно ли для этого использовать Google Analytics?

Maksym Kozlenko 05.09.2012 08:15
trackjs.com as well, and it tracks what the user and network were doing before the error.
Todd Gardner 29.10.2013 00:31

В дополнение к приведенному выше списку есть также бесплатный log4sure.com, а также мониторинг журналов в реальном времени. Вы также можете создать свою собственную таблицу журналов

Bhavin 25.04.2015 20:55
erroralerts.com not found
Kiquenet 24.11.2015 01:33

Я бы еще добавил ошибка

yegor256 29.08.2016 03:39
exceptionhub.com is no longer in business, the domain is for sale.
Cristi S. 13.07.2017 03:46
errlytics.com is also there. It also provides front end performance monitoring like page load and ajax call monitoring.
Vivek Marakana 06.09.2017 10:13
jsnlog.com is free and открытый источник.
stomy 28.05.2019 18:27

Недавно я использовал Appfail, который фиксирует ошибки как asp.net, так и JavaScript.

Если вы используете Google Analytics, вы можете регистрировать ошибки JavaScript в событиях Google Analytics.

См. Это приложение: http://siteapps.com/app/log_javascript_errors_with_ga-181

Надеюсь, это поможет.

Эта ссылка больше не работает. Вы можете найти статью о регистрации ошибок Javascript с помощью Google Analytics на странице developers.google.com/analytics/devguides/collection/….

Martin Omander 14.06.2018 13:11

Другие вопросы по теме