我們有一個ASP.NET應用程序,它使用異常處理應用程序塊將異常記錄到數據庫(間接使用日誌記錄塊)。這一切工作完美。但是,因爲它使用異常處理塊來記錄數據,所以每次我們想要登錄時,都必須new'd一個System.Exception對象。由於我們沒有拋出異常,所以沒有性能問題。但是,每次我們想記錄一些東西時,我們都必須創建一個新的異常對象。這是一個糟糕的設計?企業庫中異常處理塊的使用
回答
我不會這麼說。它是一個異常處理塊,而不是一個日誌塊。也許你應該用EL的LAB來代替?
順便說一句,我喜歡和使用ELMAH作爲異常處理塊。它也不是爲記錄而設計的,只是爲了處理異常並將它們記錄下來供日後檢查。但是,我認爲有一種方法可以在不新建Exception對象的情況下引發異常事件。
既然你已經在使用記錄應用程序塊和EL(哪怕是間接的),你就應該能夠通過它,而不是僅僅newing了一個異常的日誌記錄登錄到數據庫。
我太喜歡ELMAH的異常處理。我將它用於未處理的異常日誌記錄,並將log4net用於所有其他日誌記錄。
您可以獨立於異常處理策略定義日誌記錄策略,它們不必一起使用。
異常處理和記錄許多次通過聽衆鏈接一起使用。例如,您可以捕獲catch塊中的特定錯誤並引用您的異常處理策略,該策略還可以包括通過logCategory執行的日誌記錄操作。
在另一方面,執行某些事件/動作只是記錄,只是指定不從異常處理策略中引用的日誌跟蹤偵聽器。用Trace.Write語句輸出您的日誌消息。
無論如何,如果你創建不同的策略,你可以根據需要聽衆鏈時更大的靈活性。
更新: 在您的loggingConfiguration部分中,配置另一個Trace Listener。然後,您需要在web.config的categorySources部分下添加偵聽器。下面顯示的是登錄到兩個來源,事件日誌和一個XML文件。
<categorySources>
<add switchValue="All" name="Database Events">
<listeners>
<add name="Formatted EventLog TraceListener"/>
<add name="XML TraceListener"/>
</listeners>
</add></categorySources>
根據您的exceptionHandling部分,確保連線了你的「數據庫事件」 categorySource你的政策:(一些細節省略可讀性)
<exceptionHandling>
<exceptionPolicies>
<add name="Data Access Policy">
<exceptionTypes>
<add type="System.OverflowException, mscorlib, ... postHandlingAction="NotifyRethrow" name="OverflowException">
<exceptionHandlers>
<add logCategory="Database Events" eventId="100" ... severity="Critical" name="Logging Handler"/>
<add exceptionMessage="Overflow Exception caught." ... >
</exceptionHandlers>
</add>
</exceptionTypes>
</add>
</exceptionPolicies></exceptionHandling>
所以,最終的結果在這種情況下鏈接兩個從一個策略引用的聽衆。請注意,它是從system.overflow異常類型處理的 - 只是一個示例,說明如何爲不同的異常指定不同的處理程序。
當然,你可以只添加一個日誌文件監聽器,當你需要,而不必依賴於異常處理記錄事件/動作從你的代碼中調用它。讓我知道你是否想要更多的細節。
- 1. ELMAH與企業庫異常處理塊
- 2. Microsoft企業庫異常處理塊使用log4net
- 3. 企業庫的異常處理應用程序塊
- 4. 企業庫 - 配置異常處理
- 5. 使用企業庫的WCF中的異常處理4.1
- 6. 企業庫異常處理應用程序塊
- 7. 異常使用企業庫
- 8. 使用企業庫的異常處理日誌記錄
- 9. 如何使用企業庫異常處理創建自定義異常處理程序塊
- 10. 企業庫異常處理「處理」方法
- 11. 異常處理和日誌記錄應用程序塊企業庫5.0
- 12. 異常與企業庫5.0
- 13. WCF服務的企業庫異常處理問題
- 14. 企業庫 - 無法處理的異常:「LoggingExceptionHandler」
- 15. 企業庫,異常處理塊:不能使用自定義異常來封裝WrapHandler
- 16. 企業庫控制檯:無記錄異常處理程序
- 17. 在ASP.NET中使用企業庫異常處理應用程序塊 - 代碼審查
- 18. 向企業庫中的異常處理添加更多詳細信息
- 19. 更改企業庫異常處理格式化程序中的時間戳值
- 20. 在企業庫6中爲WCF配置故障合同異常處理程序
- 21. 企業庫6,異常塊,如何挑選自定義異常類
- 22. 使用企業庫
- 23. 庫中的異常處理
- 24. VSTO Excel AddIn使用企業庫吞嚥異常
- 25. 企業庫驗證塊
- 26. 企業庫驗證塊
- 27. 企業庫安全模塊
- 28. 企業庫在Web應用程序中拋出異常
- 29. 異步TaskManager處理作業/步異常
- 30. Java異常處理finally塊
您是否有任何示例或鏈接來演示鏈接不同的策略? – Herman 2009-01-05 17:45:38