Tüm JavaScript hatalarını yakalayın ve sunucuya gönderin


232

Herkesin JavaScript hatalarını global olarak kullanma ve istemci tarayıcısından bir sunucuya gönderme konusunda tecrübesi olup olmadığını merak ettim.

Benim açımdan oldukça açık olduğunu düşünüyorum, istemci tarafında gerçekleşen her istisna, hata, derleme hatası, vb bilmek ve bunları rapor etmek için sunucuya göndermek istiyorum.

Ben esas head.jsolarak sunucu tarafı için MooTools ve (JS tarafı için) ve Django kullanıyorum.


20
Bu sorunun neden belirsiz olduğunu anlamıyorum.
Michael Hilus

3
Soruyu yeniden açmak için iki kez oy verdi, ancak şanssız. Bu sorunun neden bu kadar belirsiz olduğu kapalı.
Muhammed Usman

7
@ andrew-barber - Eğer pek çok kullanıcı bu soruyu oylayacak kadar alakalı buluyorsa, o zaman belki sizin için belirsizse sorun sizinle mi ??
isapir

5
Bu soru sadece açık değil, aynı zamanda hafife
alınmış

Yanıtlar:


16

Son zamanlarda Sentry'yi üretimde test ettim ve iyi çalışıyor (JS ve PHP gibi diğer diller)

1- Açık kaynak kodlu (Kendi sunucunuza kurabilirsiniz) 2- Ücretsiz planı kullanabilirsiniz (100 rapor / gün)

Veya sunucunuza kurun: github.com/getsentry


Eğitim kurumları için sınırsız bir ücretsiz plana sahip olduklarını unutmayın
christianvuerings

8
Artık açık kaynak gibi görünmüyor, tüm seçenekler ücretli mi?
David Cumps

4
@DavidCumps Hala ücretsiz hizmet sunuyor (Deneme), Ama sadece 7 günlük hata geçmişi alıyorsunuz veya açık kaynağından beri kendi sunucunuza kurabilirsiniz ( github.com/getsentry )
Tarek

1
Google Etiket Yöneticisi zaten GA kullanarak, özellikle de kontrol belki değerinde bir JavaScript hatası İşleyici vardır
Adrian Gunawan

Bunun için TrackJS'ye de göz atmalısınız . Ücretli bir hizmettir, ancak kullanıcının hata ayıklama için hata durumuna nasıl girdiğiyle ilgili bir ton bağlam sağlar. Ben geliştiriciler üzerinde ve onunla tonlarca hata düzeltildi :)
Todd Gardner

318

Pencereyi kontrol ederdim. Hata

Misal:

window.onerror = function(message, url, lineNumber) {  
  //save error and send to server for example.
  return true;
};  

True değerinin döndürülmesinin varsayılan işleyicinin tetiklenmesini engelleyeceğini ve false değerinin döndürülmesinin varsayılan işleyicinin çalışmasına izin vereceğini unutmayın.


9
Window.onerror öğesini tercihen başka bir şey çalıştırmadan önce atamak istersiniz. Yani nereye koyarsanız koyun, diğer js kodlarınızdan / dosyalarınızdan önce çalıştığından emin olun.
Mike Lewis

17
Not: Mozilla şunları önerir: 'Bazı hata olaylarının bazılarının birçok pencere window.onerror'u tetiklemediğini unutmayın, özellikle onları dinlemeniz gerekir.'
Adam Naylor

88
Evet, bazı / çok , çok açıklayıcı nasıl söylediğini seviyorum - teşekkürler Mozilla.
Daniel Mendel

5
Mozilla GlobalEventHandlers.onerror'u açığa çıkarıyor: developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/…
roland

1
Window.onerror öğesinin kendisini işleyen kod bir hata atarsa ​​ne olur. Sonsuz bir döngü olasılığı var mı?
Martin Brown

15

Web siteniz Google Analytics kullanıyorsa, ne yaptığımı yapabilirsiniz:

window.onerror = function(message, source, lineno, colno, error) {
  if (error) message = error.stack;
  ga('send', 'event', 'window.onerror', message, navigator.userAgent);
}

Yukarıdaki kod hakkında birkaç yorum:

  • Modern tarayıcılarda, tam yığın izlemesi günlüğe kaydedilir.
  • Yığın izlemesini yakalamayan eski tarayıcılarda, bunun yerine hata iletisi günlüğe kaydedilir. (Deneyimlerimde çoğunlukla daha önceki iOS sürümü).
  • Kullanıcının tarayıcı sürümü de günlüğe kaydedilir, böylece hangi OS / tarayıcı sürümlerinin hangi hataları attığını görebilirsiniz. Bu, hata önceliklendirmesini ve test etmeyi basitleştirir.
  • Bu kod, Google Analytics'i böyle "analytics.js" ile kullanırsanız çalışır . Eğer "gtag.js" kullanıyorsanız bunun yerine, böyle , sen fonksiyonun son satırı çimdik gerekir. Ayrıntılar için buraya bakın .

Kod yerleştirildikten sonra, kullanıcılarınızın Javascript hatalarını şu şekilde görüntülersiniz:

  1. Google Analytics'te Behaviorbölümü ve ardından Top Eventsraporu tıklayın.
  2. Etkinlik Kategorilerinin bir listesini alacaksınız. window.onerrorListeye tıklayın .
  3. Javascript yığın izleri ve hata mesajlarının bir listesini göreceksiniz. Secondary dimensionDüğmeye tıklayarak ve Event Labelgörüntülenen metin kutusuna girerek kullanıcılarınızın işletim sistemi / tarayıcı sürümleri için rapora bir sütun ekleyin .
  4. Rapor aşağıdaki ekran görüntüsü gibi görünecektir.
  5. İşletim sistemi / tarayıcı dizelerini daha okunabilir açıklamalara çevirmek için bunları https://developers.whatismybrowser.com/useragents/parse/

resim açıklamasını buraya girin


3
Bu, tüm hataları yakalamıyor, sadece blokları yakalamaya çalışın, ancak açıklamak için harika bir şey ve aşağı oyları hak ettiğinizi düşünmüyorum.
Nick Steele

Teşekkürler, Nick! Cevabımı web sitemde iyi çalışan ve sadece hapsettiğin tuzakları değil, tüm hataları yakalayan savaşta test edilmiş kodla güncelledim.
Martin Omander

2

Üçüncü taraf hizmetlerini kullanmaya çalışmayın, bunun yerine kendi hizmetinizi deneyin.

Hata İşleyicileri aşağıdaki senaryoları yakalayabilir,

  1. Yakalanmayan TypeError yakalanamıyor
  2. Yakalanmayan ReferenceError yakalanamıyor örneğin: var.click ()
  3. TypeError yakalanabilir
  4. Sözdizimi hatası yakalanabilir
  5. ReferenceError yakalanabilir

Javascript Hataları Yakalamak için:

window.addEventListener('error', function (e) {
  //It Will handle JS errors 
})

AngularJS Hataları Yakalamak için:

app.config(function ($provide) {
$provide.decorator('$exceptionHandler', function ($delegate) {
   return function (exception, cause) {
       //It will handle AngualarJS errors
      }
   })
})

0

Ayrıca, http://jslogger.com hizmeti bu konuda yardımcı olabilir:

Javascript hatalarını ve buluttaki olayları günlüğe kaydetme

dan http://jslogger.com/features :

Artık sitenizin kullanıcı deneyimini bozan tüm hataları gözetleyebilirsiniz. Her Javascript hatası yakalanacak ve daha sonra hata ayıklama için size getirilecektir.

YASAL UYARI: hizmete / şirkete bağlı değildir.


1
503 Hizmet Kullanılamıyor
Rax

0

Atatus'u deneyebilirsiniz - Modern web uygulamaları için Gerçek Kullanıcı İzleme (RUM) ile birlikte yeni bir JavaScript Hata İzleme Hizmeti.

Sadece hataları değil, aynı zamanda hatayı tetikleyen kullanıcı olaylarını da yakalarız. Bu, hatanın sonunda yeniden oluşturma adımları verir.

Hata yakalamanın yanı sıra, sayfa yükleme süresini de yakalar ve farklı perspektiflerde gösteririz - Coğrafi, Tarayıcı, Sayfa Detaylandırma, Sayfa Histogramı, Ajax İzleme ve İşlem İzleme.

https://www.atatus.com/

Mevcut dokümanlar: https://www.atatus.com/docs

Feragatname: Atatus'ta bir web geliştiricisiyim.


1
Ataus'u entegre ettim ve istisnaya neden olan foo.bar = '' gibi bir şey denedim. Ancak Atatus panosunda hiçbir şey göremiyorum.
vmachacek

Bize bir e-posta bırakabilir misiniz?
Fizer Khan

5
Utanmaz fiş. Reklamlar sağ tarafla sınırlı olmalıdır.
Will


-2

Http://rescuejs.com/ adresindeki bu yeni hizmete göz atmak isteyebilirsiniz . https://bugsnag.com/

Sunucu tarafı kodu kendiniz yazmadan tüm javascript hatalarınızı günlüğe kaydetmenizi sağlar. Ayrıca tarayıcı sürümlerini de izler.

Ben onları% 100 "kurumsal hazır" düşünün emin değilim, ama kesinlikle kontrol değer.


8
Kapatıldı. Şimdi kaydolmaya çalışırsanız "İlginiz için teşekkür ederiz, ne yazık ki Rescue.js artık aktif olarak üzerinde çalışılmıyor."
Gün
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.