2009-01-31 58 views
5

大家可能會注意到,現今大多數現代應用程序都有一種方式讓用戶自動或通過用戶權限發送崩潰/錯誤報告。一些示例是Mozilla Crash Reporter或大多數Microsoft應用程序。如何實現ASP.NET Web應用程序的自動錯誤/崩潰報告?

我真的很喜歡這個功能,因爲它可以讓我收集的錯誤有幫助的信息快速報告不只是讓我的用戶報告的bug /問題歷來如提交幫助票。

我不知道是否有在ASP.NET中實現Web應用程序性能的簡單的或系統的方法。

有你們有什麼經驗或知識共享這WebForms和MVC應用程序?或者,如果這可以在JavaScript/JQuery之類的客戶端實現,那很好。

謝謝!

+0

相關:http://stackoverflow.com/questions/10053342/open-source-multi-platform-b​​rowser-based-screen-capture-extension – cregox 2015-03-31 22:13:45

回答

7

ASP.NET 2.0引種健康監測,這可以讓你只需添加一些東西到web.config做到這一點。請參閱:http://msdn.microsoft.com/en-us/library/ms998306.aspx

它可以登錄到郵件,sql,事件日誌等,並允許您設置緩衝區。因此,例如,如果sql數據庫發生故障,或者某個用戶發現了一個錯誤,並嘗試常常打一個錯誤,則它不會殺死您的郵件服務器:-)

您還可以記錄失敗的身份驗證和應用程序池重新啓動它,如果你只是需要它快速工作,這是非常有用的。它仍然是問題,如果它是管理所有錯誤的最佳解決方案。因爲它可能沒有得到你需要的所有信息,例如瀏覽器版本或smt。

+0

+1對於一個非常有用的答案。我在下面回答了一些我在ASP.NET 1.0中做了這樣的軟件,但是你讓我想我可能需要採取另一種方法。謝謝! – 2009-02-02 18:23:20

1

對於ASP.NET applicatino - 或與此有關的任何Web應用程序 - isn't這只是一個過程分爲兩個步驟:

  1. 記錄錯誤(顯然);和
  2. 在錯誤文檔上放置一個表單以允許用戶輸入反饋。

或者有更多的嗎?

+0

謝謝。確實如此。但是,我正在尋找一個庫或框架(內置或不內置),以便我可以在ASP.NET應用程序中輕鬆使用它。 – kimsk 2009-02-03 02:53:43

4

ELMAH是插入並檢測異常的庫。你也可以自己登錄一個事件。這些事件和大量數據(如URL參數和瀏覽器信息)可以通過電子郵件發送給管理員並可選擇存儲在數據庫中以供顯示。 (相當於網站的事件日誌。)它沒有我見過的內置用戶表單,但可以擴展爲包含這樣的選項。

我已經使用/定製它大約兩年了,它是非常特殊的。

另一種選擇可能是使用Kampyle,其中包括您的網站的右下方有一個反饋箱。如果在網站上檢測到問題,您可以使用Javascript觸發此框出現。

+0

感謝您的回答。這些工具也可能對我的項目有所幫助。 – kimsk 2009-02-03 02:56:38

1

您的錯誤將通過Global.asax.cs文件(您可能需要創建)的Application_Error方法。我用這個事實來捕獲錯誤,並將其記錄到數據庫:

void Application_Error(object sender, EventArgs e) 
{ 
    try 
    { 
     SqlConnection errConnection = new SqlConnection("Your connection string"); 

     // After setting up a command object, I call a stored procedure to save information about 
     // the crash. I pass two primary arguments. The first is the URL: 
     errCommand.Parameters.Add("@URL", SqlDbType.VarChar).Value = Request.Url.ToString(); 

     // The second is the error information. 
     errCommand.Parameters.Add("@EI", SqlDbType.Text).Value = Server.GetLastError().ToString(); 

     // I pass some other information from my session as well... 

     // After setting up an output parameter called ErrorID, I call the command... 
     errCommand.ExecuteNonQuery(); 
     // Now Error ID is stored in the session. 
     Session["ErrorID"] = (int)ErrorID.Value; 
    } 
    catch { } // I do NOT want the error handling call to throw an error. 
} 

現在,這樣當發生特定頁面獲得控制權的錯誤,你應該已經建立了你的web.config文件。在此頁面中,您將檢查會話中的錯誤ID並將其顯示給用戶。在輸出中,我要求用戶寫下錯誤,如果他們想給我們打電話瞭解更多信息。如果我們收到請求,我可以進入數據庫並獲得錯誤的完整跟蹤。

相關問題