Javascript Exception, Warning loggolása szerverre

Azt szeretném megoldani, hogy az összes kliens oldali logot a szerverre át szeretném küldeni például XHR küldésekkel. (Nyilván ha éppen az a baj, hogy nincs hálózat, akkor nem fog átmenni.)

Az értelme az volna, hogy ha esetleg nem működik valami, akkor lehetőleg ne kelljen a felhasználóhoz rohangálni: a szerveren ott lesznek a logok.

Megtaláltam, hogy a console objektumon keresztüli üzeneteket át lehet írányítani ilyenekkel:

  const info = console.info.bind(console)
  console.info = (...args) => {
    info('My Console!!!')
    info(...args)
  }

Megtaláltam azt is, hogy globális kezeletlen exception handlert is fel lehet venni:

window.addEventListener('error', function (evt) {
    console.log("Caught[via 'error' event]:  '" + evt.message + "' from " + evt.filename + ":" + evt.lineno);
    console.log(evt); // has srcElement / target / etc
//    evt.preventDefault();
});

A kérdésem az, hogy van-e más ilyen forrás, amit lehet/érdemes loggolni. Illetve van-e erre valami teszt lehetőség kipróbálgatni? Ami leginkább érdekelne, hogy régebben láttam warningokat is a web developer logban, amiket a HTML engine adott ki magából - persze most nem jut eszembe, hogy mire jött. Ezek a console.warn() híváson keresztül mennek, vagy más úton kerülnek a logba? Ha más úton, akkor hogyan lehetne elkapni? Hogy lehetne ilyen példaoldalt csinálni, amit ki tudom próbálni, hogy a log szerverre irányítás minden esetre jól működik-e?

Esetleg ki használ ilyen kész libet, amit csak be kell emelni?

Hozzászólások

Köszi!

Az irány jó, de ilyen ilyen tömegű 3rd party kódot nem rántanék be csak ezért. Tippre kb 200 sor volna ez vanilla JS-ben, ezt pedig nem nagyon tudom átlátni, hogy mit miért csinál. Overengineer-ednek is látszik. Megpróbálom azért átrágni magam rajta lassan.

Eleve ezt a komponenst hülyeség volna másik szerverről lekérni, inkább sajátról. De még bölcsebb lenne inline script-be tenni már a szerveren.

Egy érv sentry-jellegű megoldás használata mellett és a "csináljunk sajátot" ellen: az ilyen rendszernél nem a kliensoldali javascript funkcionalitás az igazán komplikált. Az, hogy megbízhatóan fusson a szerver, ami fogadja a log-okat, és hogy azon a szerveren majd a programozó csapat áttekinthetően el tudja érni a beérkezett információt (pl. csoportosítva, hogy milyen exception-ok léptek fel, hányszor, milyen kliensnél, azok a kliensek épp mit csináltak, stb.) sokkal bonyolultabb feladat.

Még egy: Sentry-nek pl. extra előnye, hogy szerveroldali kódból is lehet hasonló infókat beküldeni, így egy helyen látod a teljes stack exception-jeit.

Barmilyen RUM megoldas (ElasticSearch APM ingyenes Basic license-el is; de van meg csomo ahol 5 agent-ig inygenes, vagy mas licenszelesi modon ingyenes)