我們正在C#中構建ASP.NET應用程序ASP.NET - 拋出或記錄錯誤
我們有3層:UI,Business和Database。我們需要澄清錯誤處理/日誌記錄。我們有一個錯誤記錄框架來記錄錯誤。
我的問題是:我們是否需要在每層或僅在主調用層(UI層)中通過將錯誤從業務層和數據庫層丟到UI層來記錄錯誤? 是否有最佳做法?
如果將是巨大的,如果你還可以提供一個參考文件或網頁的引用(如果需要)。
感謝和問候...... Sruthi Keerthi。
我們正在C#中構建ASP.NET應用程序ASP.NET - 拋出或記錄錯誤
我們有3層:UI,Business和Database。我們需要澄清錯誤處理/日誌記錄。我們有一個錯誤記錄框架來記錄錯誤。
我的問題是:我們是否需要在每層或僅在主調用層(UI層)中通過將錯誤從業務層和數據庫層丟到UI層來記錄錯誤? 是否有最佳做法?
如果將是巨大的,如果你還可以提供一個參考文件或網頁的引用(如果需要)。
感謝和問候...... Sruthi Keerthi。
最近,我們開始在一些ASP.net應用程序的工作。 爲了記錄錯誤,我們使用log4net(基於log4j)。有了這個DLL,你可以調用不同類型的日誌記錄方法,如致命錯誤或只是一個信息消息。
我建議你不要從不同的層面拋出錯誤。如果在該層上發生錯誤,它應該停留在那裏並登錄到適當的位置。否則這是很多工作,它會破壞應用程序的可維護性。
我會做兩種:
這是如何工作的?它如何記錄它發生的地方? – 2009-09-14 20:19:23
在我的應用程序中,我盡我所能將錯誤記錄在「產生它的代碼」附近。但是我確保我的應用程序(Elmah或通過在Application_Error中放置一些代碼)處理並記錄所有未處理的錯誤。我從不向用戶展示真實的信息。它不會告訴最終用戶,它會向黑客提供有關您的代碼的可能信息。如果我可以給用戶一個有用的消息,我會的。否則,我給出一個通用的錯誤頁面(例如:發生了錯誤,請重試)。 – 2009-09-14 20:30:52
如果你能做些什麼在給定的基礎架構層的Exception
,抓住它那裏,處理它,然後用你選擇的日誌框架記錄它,如果它仍然是適當的這樣做。例如,我在代表死鎖的數據訪問層看到了SqlExceptions
。當然,最好是消除這些僵局,但是直到我們能夠診斷出它們爲止,那麼捕獲那些Exceptions
並重試一定次數是有意義的。
如果你不能在這一級處理它 - 如果沒有什麼理智,用它做 - 不抓住它。只要讓它冒泡到最高級別的上下文中,你可以對此做些什麼,或者如果沒有什麼可以做的話,讓它一直冒泡到可執行文件/ UI,在那裏你可以記錄它並顯示適合於用戶(即不是堆棧跟蹤或Exception
消息)。
有關其他細節(和優秀的諮詢)看到這樣類似的問題,Should I catch exceptions only to log them?
這個。當然這是最重要的+1提到預期的異常應該被處理,無法處理的異常會被拋出鏈條。 – 2009-09-14 19:55:15
我們總是讓錯誤的泡沫頂端。然後我們附加到HttpApplication.Error事件。那時我們決定做什麼(即登錄到數據庫,文件,顯示友好的消息等)。
@Jeff - 你是對的。我修改它以更好地回答這個問題。 – jrummell 2009-09-14 20:17:53
從我+1作爲結果(和良好的4guys鏈接,因爲它聽起來像原來的海報想要一些非SO確認) - 抱歉刪除該 – 2009-09-14 20:23:44
我的初始上下文不同意。如果您可以選擇在來源或中心位置(如HTTpApplication.Error事件)處理異常,那麼我會在集中位置處理異常。否則,異常記錄代碼(如果這是你所做的)將遍及你的代碼庫。 在需要釋放資源的情況下,當然您必須在源處處理異常。 – 2009-09-14 20:51:47