2009-07-15 116 views
6

有沒有簡單的方法來記錄ASP.NET應用程序中的所有異常?我已經通過Application_OnError事件記錄了未處理的異常,但即使在頁面級別處理異常時,我也要執行日誌記錄。ASP.NET異常處理/日誌記錄

非常感謝。

+0

你的意思是抓住它,或使用Page_Error或其他東西?請更具體一些。 – RichardOD 2009-07-15 07:44:52

+0

通過捕捉來處理。 – staterium 2009-07-15 07:48:13

回答

5

假設您只是拋出並捕獲自己的異常類型(從System.Exception ofc派生),您可以在構造函數中創建基本異常日誌。

1

在catch塊中調用處理異常的記錄組件。

+0

嗯,是的。但我想知道是否沒有更簡單的方法來做到這一點?沒有單獨修改每個catch語句? – staterium 2009-07-15 07:35:54

+0

如果你不處理這個錯誤,爲什麼你有catch語句? 如果你處理錯誤,那麼就沒有必要用它堵塞你的日誌? – 2009-07-15 07:41:11

+2

我確實爲用戶處理錯誤,但爲了調試目的,我需要更多的信息而不是顯示給用戶的信息。 – staterium 2009-07-15 07:43:31

0

我不認爲有自動記錄處理的異常。如果你已經爲未處理的異常做了Application_OnError日誌記錄,恐怕Colin是正確的,你將不得不在catch塊中調用你想要登錄的異常處理異常的日誌記錄組件。

9

您可以使用Elmah來記錄您的例外。它非常易於使用,並提供有關該問題的良好信息。

1

ASP.NET健康監測做到這一點優雅而相當自動的方式(無需手動捕獲異常):

當您單擊第一個鏈接,有一個如何啓用和配置ASP.NET Health Monitoring的例子。您需要在web.config文件中配置它。

用於登錄到一個數據庫,您可以使用ASP.NET SQL Server註冊工具可以創建corresponsing表:ASP.NET SQL Server Registration Tool (Aspnet_regsql.exe)

我真的很喜歡它。對於手動日誌記錄來說,patterns & practices Enterprise Library's Logging Application Block可能適合你,但這有些偏離主題。

馬蒂亞斯

3

我同意科林,你應該記錄,無論你趕上(不重新拋出)。但是如果你需要記錄每一個沒有太多代碼修改的異常,然後處理AppDomain.FirstChanceException Event,你會得到所有的異常(也許這太多了:p,但它可以幫助你清理代碼)。