2009-09-14 54 views
2

我們正在C#中構建ASP.NET應用程序ASP.NET - 拋出或記錄錯誤

我們有3層:UI,Business和Database。我們需要澄清錯誤處理/日誌記錄。我們有一個錯誤記錄框架來記錄錯誤。

我的問題是:我們是否需要在每層或僅在主調用層(UI層)中通過將錯誤從業務層和數據庫層丟到UI層來記錄錯誤? 是否有最佳做法?

如果將是巨大的,如果你還可以提供一個參考文件或網頁的引用(如果需要)。

感謝和問候...... Sruthi Keerthi。

回答

3
+0

@Jeff - 你是對的。我修改它以更好地回答這個問題。 – jrummell 2009-09-14 20:17:53

+0

從我+1作爲結果(和良好的4guys鏈接,因爲它聽起來像原來的海報想要一些非SO確認) - 抱歉刪除該 – 2009-09-14 20:23:44

+0

我的初始上下文不同意。如果您可以選擇在來源或中心位置(如HTTpApplication.Error事件)處理異常,那麼我會在集中位置處理異常。否則,異常記錄代碼(如果這是你所做的)將遍及你的代碼庫。 在需要釋放資源的情況下,當然您必須在源處處理異常。 – 2009-09-14 20:51:47

1

最近,我們開始在一些ASP.net應用程序的工作。 爲了記錄錯誤,我們使用log4net(基於log4j)。有了這個DLL,你可以調用不同類型的日誌記錄方法,如致命錯誤或只是一個信息消息。

我建議你不要從不同的層面拋出錯誤。如果在該層上發生錯誤,它應該停留在那裏並登錄到適當的位置。否則這是很多工作,它會破壞應用程序的可維護性。

0

我會做兩種:

  1. 它發生在哪裏,這是一個必須登錄錯誤。
  2. 顯示到用戶界面,這取決於你的選擇,你既可以顯示完整的錯誤消息,加上堆棧跟蹤,或者只是顯示一個自定義的友好錯誤信息提供足夠的信息來查找您在步驟記錄的錯誤1.
+0

這是如何工作的?它如何記錄它發生的地方? – 2009-09-14 20:19:23

+0

在我的應用程序中,我盡我所能將錯誤記錄在「產生它的代碼」附近。但是我確保我的應用程序(Elmah或通過在Application_Error中放置一些代碼)處理並記錄所有未處理的錯誤。我從不向用戶展示真實的信息。它不會告訴最終用戶,它會向黑客提供有關您的代碼的可能信息。如果我可以給用戶一個有用的消息,我會的。否則,我給出一個通用的錯誤頁面(例如:發生了錯誤,請重試)。 – 2009-09-14 20:30:52

2

如果你能做些什麼在給定的基礎架構層的Exception,抓住它那裏,處理它,然後用你選擇的日誌框架記錄它,如果它仍然是適當的這樣做。例如,我在代表死鎖的數據訪問層看到了SqlExceptions。當然,最好是消除這些僵局,但是直到我們能夠診斷出它們爲止,那麼捕獲那些Exceptions並重試一定次數是有意義的。

如果你不能在這一級處理它 - 如果沒有什麼理智,用它做 - 不抓住它。只要讓它冒泡到最高級別的上下文中,你可以對此做些什麼,或者如果沒有什麼可以做的話,讓它一直冒泡到可執行文件/ UI,在那裏你可以記錄它並顯示適合於用戶(即不是堆棧跟蹤或Exception消息)。

有關其他細節(和優秀的諮詢)看到這樣類似的問題,Should I catch exceptions only to log them?

+0

這個。當然這是最重要的+1提到預期的異常應該被處理,無法處理的異常會被拋出鏈條。 – 2009-09-14 19:55:15

1

我們總是讓錯誤的泡沫頂端。然後我們附加到HttpApplication.Error事件。那時我們決定做什麼(即登錄到數據庫,文件,顯示友好的消息等)。