Mencatat Kesalahan JavaScript di Sisi Klien di Server [ditutup]

97

Saya menjalankan Situs ASP.NET di mana saya mengalami masalah untuk menemukan beberapa Kesalahan JavaScript hanya dengan pengujian manual.

Apakah ada kemungkinan untuk menangkap semua Kesalahan JavaScript di sisi Klien dan mencatatnya di Server yaitu di EventLog (melalui Webservice atau semacamnya)?

MADMap
sumber
Masalah mengapa kami tidak menggunakan JavaScript UnitTesting adalah karena terlalu banyak orang yang berkontribusi ke Situs / Konten dan mereka menggunakan JavaScript. Konten bukanlah hal yang harus kami (sebagai pengembang) pedulikan, tetapi ada kesalahan dalam kode. Jadi solusi umum akan lebih baik.
MADMap
Saya berasumsi Anda tidak bermaksud rata-rata pengguna berkontribusi (kalau tidak itu adalah lubang XSS) ... tapi ... Anda mungkin bisa mengisolasi JS mereka dalam percobaan / penangkapan sehingga setidaknya tidak mempengaruhi JS Anda sendiri ... tanpa mengetahui dinamika situs, saya tidak tahu apakah ini akan membantu atau tidak ...
Mike Stone
Konten tersebut berasal dari Tim lain di Perusahaan, bukan dari pengguna, jadi ini bukan risiko keamanan
MADMap
Bugsnag secara otomatis akan mencatat kesalahan Anda & menampilkannya di dasbor. Bekerja untuk .NET & JS.
Don P

Jawaban:

68

Anda dapat mencoba menyiapkan penangan Anda sendiri untuk kejadian onerror dan menggunakan XMLHttpRequest untuk memberi tahu server apa yang salah, namun karena ini bukan bagian dari spesifikasi apa pun, dukungan agak tidak stabil .

Berikut adalah contoh dari Menggunakan XMLHttpRequest untuk mencatat kesalahan 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
sumber
Saya baru saja merilis kontrol server yang membantu Anda melakukan ini di thecodepage.com/post/JavaScript-Error-Notifications.aspx
Gabriel McAdams
2
Akankah itu berputar tanpa batas jika macet di penangan?
Jean-Philippe Leclerc
2
@ Jean-Philippe Ya. Dan lebih buruk, itu akan melakukan titik akhir server Anda jika Anda pernah jatuh ke loop kesalahan. Anda harus menambahkan fungsi throttling ke ini untuk mencegah klien mencapai server terlalu cepat. Berikut ini contohnya dari {Track: js} github.com/TrackJs/Tech-Demo/blob/master/src/TrackJs.Demo/…
Todd Gardner
Anda juga dapat mengenkripsi token yang menyertakan ID pengguna, IP, string acak kecil (untuk menggagalkan serangan teks biasa jika algoritme enkripsi Anda cepat tetapi lemah), dan stempel waktu serta menyertakannya sebagai variabel JS di halaman. Ini kemudian dapat dikirimkan dengan laporan kesalahan dan diperiksa sebelum mengizinkannya untuk ditambahkan ke log. Ini membantu membuktikan kemungkinan keaslian pesan kesalahan dan melindungi dari serangan DoS yang bodoh, tetapi tetap tidak akan melindungi Anda dari upaya DoS yang lebih canggih seperti yang dilakukan oleh pembatasan.
mormegil
Hal ini dapat membebani server Anda misalnya jika Anda mendapatkan dan kesalahan dalam setIntervalmetode. Ada banyak layanan pelaporan kesalahan JS yang tersedia di web. Lihat ErrLytics . Ini juga memberi Anda analitik dari setiap tindakan pengguna di situs web Anda.
Vivek Marakana
28

Jawaban singkatnya : Ya, itu mungkin.

Jawaban yang lebih panjang: Orang-orang telah menulis tentang bagaimana Anda dapat (setidaknya sebagian) menyelesaikan masalah ini dengan menulis kode Anda sendiri. Namun, perhatikan bahwa ada layanan di luar sana yang tampaknya telah memastikan kode JS yang diperlukan berfungsi di banyak browser. Saya telah menemukan yang berikut ini:

Saya tidak dapat berbicara untuk semua layanan ini karena saya belum mencobanya.

Ztyx
sumber
1
Terdaftar di muscula.com. Layanan terlihat sangat menarik dan mudah diintegrasikan dan digunakan. Ada juga pustaka JavaScript github.com/csnover/TraceKit yang memungkinkan untuk mendapatkan informasi pengecualian dari klien, tetapi Anda harus mengembangkan mekanisme loggin sisi server Anda sendiri. Saya ingin tahu apakah Google Analytics dapat digunakan untuk itu
Maksym Kozlenko
1
trackjs.com juga, dan melacak apa yang dilakukan pengguna dan jaringan sebelum terjadi kesalahan.
Todd Gardner
Selain daftar di atas juga ada, log4sure.com gratis dan juga memiliki pemantauan log secara real-time. Anda juga dapat membuat tabel log kustom Anda
Bhavin
erroralerts.com tidak ditemukan
Kiquenet
1
jsnlog.com gratis dan open source .
Stomy
12

Saya baru saja menerapkan pencatatan kesalahan sisi server pada kesalahan javascript pada sebuah proyek di tempat kerja. Ada campuran kode lama dan kode baru yang menggunakan jQuery .

Saya menggunakan kombinasi window.onerrordan membungkus penangan kejadian jQuery dan fungsi onready dengan fungsi penanganan kesalahan (lihat: Pelacakan Kesalahan JavaScript: Mengapa window.onerror Tidak Cukup ).

  • window.onerror: menangkap semua kesalahan di IE (dan sebagian besar kesalahan di Firefox), tetapi tidak melakukan apa pun di Safari dan Opera.
  • Penangan acara jQuery: menangkap kesalahan acara jQuery di semua browser.
  • Fungsi siap jQuery: menangkap kesalahan inisialisasi di semua browser.

Setelah saya menemukan kesalahannya, saya menambahkan beberapa properti tambahan ke dalamnya (url, browser, dll) dan kemudian mempostingnya kembali ke server menggunakan panggilan ajax.

Di server saya memiliki halaman kecil yang hanya mengambil argumen yang diposting dan menampilkannya ke kerangka kerja logging server normal kami.

Saya ingin membuka kode sumber untuk ini (sebagai plugin jQuery). Jika ada yang tertarik beri tahu saya, akan membantu meyakinkan bos!

Karl
sumber
1
Adakah kemungkinan kode ini akan tersedia?
Luke
Sayangnya tidak :( karena saya tidak lagi bekerja untuk perusahaan tempat saya membuat kode itu. Tetapi itu hanya sekitar 100 baris kode, dan seharusnya cukup mudah dibuat ulang dari detail di atas.
Karl
1
itu di sini guys: webcache.googleusercontent.com/…
Devin G Rhode
Saya telah mencobanya, tetapi menjaga jquery dalam ketergantungan sangat merepotkan dan window.onerror menyebalkan untuk kode yang diperkecil dan javascript yang disajikan melalui cdns
Ankur Agarwal
0

Juga saya merekomendasikan menggunakan utilitas TraceTool , ia hadir dengan dukungan JavaScript dan sangat berguna untuk pemantauan JS.

cleg
sumber
TraceTool sudah mati?
Kiquenet
0

Jika Anda ingin mencatat kesalahan sisi klien kembali ke server, Anda harus melakukan beberapa jenis pemrosesan server. Taruhan terbaik adalah memiliki layanan web yang dapat Anda akses melalui JavaScript (AJAX) dan Anda meneruskan info log kesalahan Anda ke sana.

Tidak 100% menyelesaikan masalah karena jika masalahnya ada pada server web yang menghosting layanan web Anda dalam masalah, pilihan lain Anda adalah mengirimkan info melalui halaman standar melalui string kueri, Salah satu metode melakukan itu dengan membuat tag Gambar secara dinamis (yang kemudian dihapus) saat browser akan mencoba dan memuat sumber gambar. Ini mengatasi panggilan JavaScript lintas domain dengan baik. Ingatlah bahwa Anda dalam masalah jika seseorang menonaktifkan gambar;)

Aaron Powell
sumber
0

Saya telah menggunakan Appfail baru-baru ini, yang menangkap kesalahan asp.net dan JavaScript

levelnis
sumber
0

Anda berpotensi dapat melakukan panggilan Ajax ke server dari percobaan / penangkapan, tetapi itu mungkin yang terbaik yang dapat Anda lakukan.

Bolehkah saya menyarankan pengujian unit JavaScript? Mungkin dengan JSUnit ?

Mike Stone
sumber
Masalah mengapa kami tidak menggunakan JavaScript UnitTesting adalah karena ada terlalu banyak orang yang berkontribusi ke Situs / Konten dan mereka menggunakan JavaScript (tetapi tidak tahu tentang itu!) Jadi solusi umum akan lebih baik.
MADMap