Protokolování chyb JavaScriptu na straně klienta na serveru

Můžete zkusit nastavit vlastní obslužnou rutinu pro událost onerror a pomocí XMLHttpRequest sdělit serveru, co se pokazilo, ale protože to není součástí žádné specifikace, podpora je poněkud nespolehlivá.

Zde je příklad z použití XMLHttpRequest k protokolování chyb JavaScriptu:

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);
};

Krátká odpověď: Ano, je to možné.

Delší odpověď: Lidé již psali o tom, jak můžete tento problém (alespoň částečně) vyřešit napsáním vlastního kódu. Všimněte si však, že existují služby, které, jak se zdá, zajistily, že potřebný kód JS funguje v mnoha prohlížečích. Našel jsem následující:

  • http://trackjs.com
  • https://www.atatus.com
  • http://jserrlog.appspot.com
  • http://muscula.com
  • https://sentry.io
  • https://rollbar.com
  • https://catchjs.com

Nemohu mluvit za žádnou z těchto služeb, protože jsem je ještě nevyzkoušel.


Právě jsem implementoval protokolování chyb na straně serveru na chyby javascriptu na projektu v práci. Existuje směs starého kódu a nového kódu pomocí jQuery.

Používám kombinaci window.onerror a zabalení obslužných rutin událostí jQuery a funkce onready do funkce zpracování chyb (viz:Sledování chyb JavaScriptu:Proč window.onerror nestačí).

  • window.onerror :zachytí všechny chyby v IE (a většinu chyb ve Firefoxu), ale nedělá nic v Safari a Opeře.
  • Obslužné rutiny událostí jQuery:zachycuje chyby událostí jQuery ve všech prohlížečích.
  • Funkce jQuery ready:zachytí chyby inicializace ve všech prohlížečích.

Jakmile chybu zachytím, přidám k ní nějaké další vlastnosti (url, prohlížeč atd.) a poté ji odešlem zpět na server pomocí volání ajax.

Na serveru mám malou stránku, která pouze přebírá zaslané argumenty a odesílá je do našeho normálního rámce protokolování serveru.

Rád bych pro to otevřel zdrojový kód (jako plugin jQuery). Pokud má někdo zájem, dejte mi vědět, pomohlo by to přesvědčit šéfy!