Rejestrowanie błędów JavaScript po stronie klienta na serwerze [zamknięte]

97

Prowadzę witrynę ASP.NET, w której mam problemy ze znalezieniem błędów JavaScript tylko podczas ręcznego testowania.

Czy istnieje możliwość wyłapania wszystkich błędów JavaScript po stronie klienta i zalogowania ich na serwerze, tj. W dzienniku zdarzeń (przez usługę sieciową lub coś w tym rodzaju)?

MADMap
źródło
Problem, dlaczego nie używamy JavaScript UnitTesting, polega na tym, że zbyt wiele osób wnosi wkład w Witrynę / Treść i używa JavaScript. Treść nie jest czymś, na czym powinniśmy (jako deweloperzy) dbać, ale w kodzie są błędy. Więc ogólne rozwiązanie byłoby lepsze.
MADMap
Zakładam, że nie masz na myśli przeciętnego użytkownika (inaczej jest to dziura XSS) ... ale ... może możesz odizolować ich JS w try / catch, więc przynajmniej nie wpłynie to na twój własny JS ... bez wiedzy dynamika strony, nie wiem, czy to pomoże, czy nie ...
Mike Stone
Treść pochodzi od innych zespołów w firmie, a nie od użytkowników, więc nie jest to zagrożenie bezpieczeństwa
MADMap
Bugsnag automatycznie zarejestruje twoje błędy i pokaże je na pulpicie nawigacyjnym. Działa dla .NET i JS.
Don P

Odpowiedzi:

68

Możesz spróbować skonfigurować własną procedurę obsługi zdarzenia onerror i użyć XMLHttpRequest, aby powiedzieć serwerowi, co poszło nie tak, jednak ponieważ nie jest to część żadnej specyfikacji, obsługa jest nieco niestabilna .

Oto przykład z używania XMLHttpRequest do rejestrowania błędów 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);
};
Jonny Buchanan
źródło
Właśnie wydałem kontrolę serwera, która pomaga ci to zrobić na thecodepage.com/post/JavaScript-Error-Notifications.aspx
Gabriel McAdams
2
Czy zapętli się w nieskończoność, jeśli ulegnie awarii w module obsługi?
Jean-Philippe Leclerc
2
@ Jean-PhilippeLeclerc Tak. Co gorsza, jeśli kiedykolwiek wpadniesz w pętlę błędów, zepsuje twój punkt końcowy serwera. Powinieneś dodać do tego funkcję dławienia, aby zapobiec zbyt szybkiemu atakowi klienta na serwer. Oto przykład z {Track: js} github.com/TrackJs/Tech-Demo/blob/master/src/TrackJs.Demo/ ...
Todd Gardner
Możesz także zaszyfrować token, który zawiera identyfikator użytkownika, adres IP, mały losowy ciąg (aby udaremnić ataki ze znanym tekstem jawnym, jeśli algorytm szyfrowania jest szybki, ale słaby) oraz znacznik czasu i dołączyć go jako zmienną JS na stronie. Można to następnie przesłać wraz z raportem o błędach i sprawdzić przed zezwoleniem na dołączenie go do dzienników. Pomaga to udowodnić prawdopodobną autentyczność komunikatu o błędzie i chroni przed głupimi atakami DoS, ale nadal nie chroni przed bardziej wyrafinowanymi próbami DoS, tak jak to zrobi ograniczenie.
mormegil
To może przytłoczyć twój serwer, np. Jeśli otrzymasz błąd w setIntervalmetodzie. W sieci dostępnych jest wiele usług raportowania błędów JS. Checkout ErrLytics . Zapewnia również analizę każdego działania użytkownika w Twojej witrynie.
Vivek Marakana
28

Krótka odpowiedź: tak, jest to możliwe.

Dłuższa odpowiedź: ludzie już pisali o tym, jak możesz (przynajmniej częściowo) rozwiązać ten problem, pisząc własny kod. Należy jednak pamiętać, że istnieją usługi, które wydają się zapewniać, że potrzebny kod JS działa w wielu przeglądarkach. Znalazłem następujące:

Nie mogę wypowiadać się w imieniu żadnej z tych usług, ponieważ jeszcze ich nie wypróbowałem.

Ztyx
źródło
1
Zarejestrowano na muscula.com. Serwis wygląda bardzo interesująco i jest łatwy w integracji i obsłudze. Istnieje również biblioteka JavaScript github.com/csnover/TraceKit, która pozwala uzyskać informacje o wyjątku od klienta, ale musisz opracować własny mechanizm logowania po stronie serwera. Zastanawiam się, czy można do tego wykorzystać Google Analytics
Maksym Kozlenko
1
trackjs.com i śledzi działania użytkownika i sieci przed wystąpieniem błędu.
Todd Gardner
Oprócz powyższej listy, log4sure.com jest również darmowy i ma również monitorowanie logów w czasie rzeczywistym. Możesz także utworzyć własną tabelę dziennika
Bhavin
erroralerts.com nie znaleziono
Kiquenet
1
jsnlog.com jest darmowy i open source .
stomia
12

Właśnie zaimplementowałem rejestrowanie błędów po stronie serwera na błędach javascript w projekcie w pracy. Istnieje mieszanka starego i nowego kodu używającego jQuery .

Używam kombinacji window.onerrori opakowując programy obsługi zdarzeń jQuery i funkcję onready z funkcją obsługi błędów (patrz: JavaScript Error Tracking: Why window.onerror Is Not Enough ).

  • window.onerror: łapie wszystkie błędy w IE (i większość błędów w Firefoksie), ale nic nie robi w Safari i Operze.
  • Programy obsługi zdarzeń jQuery: przechwytuje błędy zdarzeń jQuery we wszystkich przeglądarkach.
  • Funkcja gotowa do jQuery: wyłapuje błędy inicjalizacji we wszystkich przeglądarkach.

Po złapaniu błędu dodaję do niego kilka dodatkowych właściwości (adres URL, przeglądarka itp.), A następnie wysyłam go z powrotem na serwer za pomocą wywołania Ajax.

Na serwerze mam małą stronę, która po prostu pobiera przesłane argumenty i wyprowadza je do naszej normalnej struktury rejestrowania serwera.

Chciałbym otworzyć kod źródłowy tego (jako wtyczka jQuery). Jeśli ktoś jest zainteresowany, daj mi znać, pomogłoby to przekonać szefów!

Karl
źródło
1
Czy jest szansa, że ​​ten kod zostanie udostępniony?
Luke
Niestety nie :( ponieważ nie pracuję już dla firmy, w której utworzyłem ten kod. Ale było to tylko około 100 linii kodu i powinno być dość łatwe do odtworzenia z powyższych szczegółów.
Karl
1
to właśnie tutaj faceci: webcache.googleusercontent.com/...
Devin G Rhode
Próbowałem, ale utrzymanie jQuery w depencdency jest ból i window.onerror bani kodu minified i JavaScript, które serwowane jest przez CDN
Ankur Agarwal
2

Jeśli korzystasz z Google Analytics, możesz rejestrować błędy javascript w zdarzeniach Google Analytics.

Zobacz tę aplikację: http://siteapps.com/app/log_javascript_errors_with_ga-181

Mam nadzieję, że to pomoże.

Leandro Lages
źródło
2
Ten link już nie działa. Artykuł na temat rejestrowania błędów JavaScript w Google Analytics można znaleźć pod adresem developers.google.com/analytics/devguides/collection/…
Martin Omander
0

Polecam również użycie narzędzia TraceTool , jest ono wyposażone w obsługę JavaScript i jest bardzo przydatne do monitorowania JS.

cleg
źródło
TraceTool nie żyje?
Kiquenet
0

Jeśli chcesz rejestrować błędy po stronie klienta z powrotem na serwerze, będziesz musiał wykonać jakiś rodzaj przetwarzania serwera. Najlepszym rozwiązaniem byłoby posiadanie usługi sieciowej, do której można uzyskać dostęp za pośrednictwem JavaScript (AJAX) i przekazywać do niej informacje z dziennika błędów.

Nie rozwiązuje problemu w 100%, ponieważ jeśli problem dotyczy serwera internetowego obsługującego usługę sieciową, w której masz kłopoty, inną opcją byłoby wysłanie informacji za pośrednictwem standardowej strony za pomocą ciągu zapytania. Jedna metoda robi to poprzez dynamiczne generowanie tagów obrazu (które są następnie usuwane), gdy przeglądarka będzie próbowała załadować źródło obrazu. Dobrze radzi sobie jednak z wywołaniami JavaScript między domenami. Pamiętaj, że masz kłopoty, jeśli ktoś ma wyłączone obrazy;)

Aaron Powell
źródło
0

Ostatnio używam Appfail , który rejestruje błędy asp.net i JavaScript

levelnis
źródło
0

Możesz potencjalnie wykonać wywołanie Ajax do serwera z próby / catch, ale to prawdopodobnie najlepsze, co możesz zrobić.

Czy mogę zamiast tego zaproponować testy jednostkowe JavaScript? Prawdopodobnie z JSUnit ?

Mike Stone
źródło
Problem, dlaczego nie używamy JavaScript UnitTesting, polega na tym, że zbyt wiele osób wnosi wkład do Witryny / Treści i używają JavaScript (ale nie mają o tym pojęcia!), Więc ogólne rozwiązanie byłoby lepsze.
MADMap