2012-06-29 59 views
17

我的項目,其中包含很多頁面的形式。這是銀行CRM系統的後端,因此在工作過程中的任何錯誤都將被捕獲和調查。 在服務器端,我們增強了java異常系統,但是如果客戶端出現錯誤 - javascript我們現在得到的唯一信息是IE中的js錯誤窗口或者有時是高級用戶製作的頁面屏幕截圖。錯誤記錄在客戶端的JavaScript

Javascript代碼同時包含jQuery的供電UI擴展和硬編碼內嵌事件處理程序和功能。

所以我詢問是否可以用於捕捉任何類型的JS-錯誤的任何方法嗎? 一些額外的庫或東西,可以給我一個堆棧跟蹤像Mozilla中的螢火或Chrome中的網頁控制檯?

+2

請參考此鏈接:http://openmymind.net/2012/4/4/You-Really-Should-Log-Client-Side-Error/ –

+0

感謝泰米爾和亞歷山大,但在我的情況下,我可以' t使用外包,並不位於我的網絡區域服務 – shershen

+0

我沒有嘗試過,我自己的,但像這樣的解決方案,可能看起來很有趣:https://www.proxino.com/ –

回答

24

查找到window.onerror。如果你想捕獲任何錯誤,並將它們報告給服務器,那麼你可以嘗試一個AJAX請求。

window.onerror = function(errorMessage, errorUrl, errorLine) { 
    jQuery.ajax({ 
     type: 'POST', 
     url: 'jserror.jsf', 
     data: { 
      msg: errorMessage, 
      url: errorUrl, 
      line: errorLine 
     }, 
     success: function() { 
      if (console && console.log) { 
       console.log('JS error report successful.'); 
      } 
     }, 
     error: function() { 
      if (console && console.error) { 
       console.error('JS error report submission failed!'); 
      } 
     } 
    }); 

    // Prevent firing of default error handler. 
    return true; 
} 
+7

你應該添加一個節流功能。如果客戶端陷入產生錯誤的循環中,客戶端將快速地DOS登錄終端。看看這個Repo是一個很好的例子。 https://github.com/TrackJs/Tech-Demo –

+0

dataType:「json」 – 0fnt

+0

contentType需要'application/json' – Kildareflare

2

如果你想要做無痛人流的實施只是把this傢伙在你的應用程序的JavaScript代碼。否則,如果你想實現一個,然後嘗試this獲得上windowerror堆棧跟蹤,你可以使用ajax報告錯誤。 A nice way跟蹤由olark報告的錯誤

2

http://exceptionhub.com 應該訣竅。 http://errorception.com/ 不提供儘可能多的調試信息,但也看起來不錯。

proxino似乎不知道自己在做什麼,他們在哪裏他們記錄器的代碼登錄的onerror事件我最後一次檢查incuding一個完整的jQuery。我不會相信一個對客戶端JavaScript有很少掌握的服務來記錄我的JavaScript錯誤。

+1

值得指出的是,Proxino也是有一個jQuery-less版本的腳本,雖然它仍然需要你在你的頁面上加載jQuery。 https://www.proxino.com/documentation –

1

我建議使用JsLog.me服務

它可以捕捉整個控制檯輸出除了錯誤和蹤跡。我們在我們的項目中使用它,記錄整個控制檯日誌可幫助我們的QA團隊記錄問題再現方式。此外,它適用於Chrome控制檯中的大型JSON對象,並進行搜索。

12

免責聲明:我是CEO和創建者Sentry,一個開源的和付費的服務,確實崩潰報告的許多語言,包括JavaScript。

捕獲前端異常可能非常具有挑戰性。技術已經變得更好(瀏覽器JS引擎),但仍然有很多限制。

  1. 您將需要一個服務器端日誌記錄端點。這有一些複雜性,因爲它可能會濫用它(即PEN測試人員可能試圖揭露它的漏洞)。你也需要在這裏處理CORS。我明顯推薦Sentry,因爲我們在課堂上是最好的,如果你想要,你可以自己託管服務器(作爲開源)。
  2. 在代碼中實際捕獲錯誤的實現非常複雜。你不能依靠window.onerror出於各種原因(主要是因爲瀏覽器在歷史上給出了不好的信息)。我們在raven.js客戶端(基於TraceKit)中所做的是修補了許多函數,以將它們包裝在try/catch語句中。例如,window.setTimeout。有了這個,我們可以安裝錯誤處理程序,它將在大多數瀏覽器中生成完整的堆棧跟蹤。
  3. 您需要確保您爲代碼生成源代碼,並且處理數據的服務器支持它們。哨兵通過自動(通過標準)抓取它們或允許您通過API上傳它們。如果沒有這個,假設你正在縮小代碼,事情變得幾乎不可用。
  4. 最後一個主要問題是噪音。大多數瀏覽器擴展將直接注入到腳本中,因此您需要濾除噪音。我們通過兩種方式來解決這個問題:要忽略的模式黑名單(即「腳本錯誤」最無用)以及要接受的域白名單(即「example.com」)。我們發現兩者的結合是有效的 - 足以去除大多數隨機噪聲。

有些事情你應該知道的服務器上:

  • 客戶有時會持續開放(即一個機器人,或者不好的用戶),並導致大量的無用數據或簡單的老錯誤。
  • 您的服務器應該能夠處理這些事件的級聯並優雅地失敗。 Sentry通過限速和採樣數據來實現這一點。
  • 異常本地化爲瀏覽器語言,如果沒有集中式數據庫,您將不能自行翻譯它們(儘管它通常很明顯是什麼意思)。
1

Atatus捕獲JavaScript錯誤並捕獲錯誤之前的用戶操作。這將有助於更好地理解錯誤。 Atatus幫助你監視你的前端,不僅錯誤,而且它的性能(真實用戶監控)

https://www.atatus.com/

免責聲明:我在Atatus Web開發人員。