我有一個WinForms應用程序,我需要記錄所有異常(到文件,到web服務,無論),處理和未處理。我怎樣才能做到這一點?應用程序日誌
應用程序日誌
回答
我還沒有使用它,但Exceptioneer是高度重視...
在.NET世界上最常用的日誌框架是log4net的。
但是也有一些需要log4net的在應用程序中集成兩個步驟:
- 配置log4.net。例如,在log4net Config Examples頁面上檢出FileAppender。
- 準備你的類使用log4net的:
每個類應包含用於記錄的字段:
private static ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
現在,每當你將不得不處理異常,你會做以下:
try
{
// Do stuff here
}
catch (Exception ex)
{
_logger.Error("Operation failed.", ex);
}
這樣你只解決了問題的一半:處理的異常。
爲了捕獲所有未處理的異常在Windows窗體應用程序,你必須處理由.NET Framework提供2個事件:
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.ThreadException += Application_ThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
_logger.Error("Unhandled exception.", (Exception)e.ExceptionObject);
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
_logger.Error("Unhandled application exception.", e.Exception);
}
這all.Nice和容易!
當您開始將應用程序交付給一個或多個客戶時,情況變得複雜。這是因爲您需要請您的客戶爲您提供日誌文件以檢查應用程序是否遇到任何問題。
因此,必須要解決兩個問題:
- 如何當一些錯誤發生在您的應用程序得到通知?
- 如何獲取有關異常,環境等的詳細信息?
一種解決這兩個問題是使用專用的服務,集中在一個單一的地方所有的異常,並通知您時,您的應用程序遇到任何異常。
有幾種服務試圖解決所有這些問題,其中之一是ExceptionTail。
ExceptionTail的一個非常不錯的功能是它可以通過custom log4net appender與使用log4.net的現有應用程序無縫集成。
這意味着您無需重新編譯整個應用程序即可使用該服務。只需在應用程序的文件夾中放入一些dll文件,在應用程序配置文件中添加一些東西,就可以開始使用了。
這是一個很好的答案,我也建議使用Log4Net,但我會用自定義Logging類將調用包裝到ILog對象中,以防萬一以後日誌引擎改變時,一個地方要更新,所有使用包裝類的類都可以。 – 2011-07-03 12:31:59
- 1. 發送應用程序崩潰日誌/常規應用程序日誌
- 2. 事件日誌名稱不是「應用程序」,而是日誌寫入「應用程序」日誌
- 3. Azure日誌與應用程序網關診斷日誌集成
- 4. 分離tomcat日誌文件和應用程序日誌文件
- 5. 將應用程序日誌轉發到Windows事件日誌
- 6. Django + heroku:django日誌出現,應用程序日誌不
- 7. 如何添加Java應用程序日誌,系統日誌
- 8. 在jenkins控制檯日誌上顯示應用程序日誌
- 9. 將應用程序日誌重定向到docker日誌
- 10. Windows Azure日誌記錄:WADLogsTable作爲應用程序日誌?
- 11. Git忽略 - 應用程序日誌
- 12. Log4j分組應用程序日誌
- 13. 從iPhone應用程序導出日誌
- 14. AzureWebApp:監視器應用程序日誌
- 15. 生成應用程序運行日誌?
- 16. Heroku應用程序 - 日誌文件夾
- 17. Java應用程序的日誌框架
- 18. 。應用程序日誌記錄
- 19. 從日誌應用程序中脫落
- 20. 應用程序日誌堆棧
- 21. PHP應用程序日誌存儲
- 22. web2py應用程序日誌記錄
- 23. 查看coldfusion日誌的應用程序
- 24. 應用程序洞察日誌分析
- 25. 從Android獲取應用程序日誌
- 26. 開始鍛鍊日誌應用程序
- 27. Java應用程序+日誌記錄
- 28. Log4Net或日誌應用程序塊
- 29. 應用程序日誌不沖水
- 30. 存儲應用程序日誌一天
異常者看起來不錯:) – SubniC 2011-02-15 12:59:34