2013-03-10 69 views
2

我使用log4net的登錄預期的異常像以下:有沒有辦法記錄ASP.NET頁面中發生的任何意外異常?

try { 
    // some exception occurred 
} catch (Exception ex) 
{ 
    log.Error("Exception occurred!", ex); 
} 

的信息將被寫入到文件或某個地方我設置。但對於那些不在try ... catch塊運行時異常的應用程序,如何在任何時候記錄它們?

log4net是否支持它或有什麼方法將它們記錄在一起?謝謝。

+1

意外...還是未處理? ;) – sisve 2013-03-10 12:41:29

回答

7

您可以訂閱Global.asax中的全局Application_Error事件處理程序,其中所有未處理的異常都會冒泡,並且您將有可能記錄(並可能處理它們)。

例如:

protected void Application_Error() 
{ 
    var exception = Server.GetLastError(); 
    log.Error("Exception occurred!", exception); 

    // TODO: optionally handle the exception here, for example display 
    // some custom error page or something 
} 
+0

你的解決方案很簡單,適合我,謝謝。 – JerryCai 2013-03-10 13:04:14

+0

還有一個問題,在我開始記錄異常之後,它會一直拋出這個異常:'2013-03-10 21:05:18,812 [14] ERROR ASP.global_asax [(null)] - 發生異常! System.Web.HttpException:在System.Web.StaticFileHandler.GetFileInfo(字符串virtualPathWithPathInfo,字符串physicalPath,HttpResponse對象響應) 在System.Web.StaticFileHandler.ProcessRequestInternal文件不存在 (HttpContext的背景下)' 但我不知道誰在哪裏調用並拋出這個異常,我該如何調試它?從堆棧跟蹤我不知道。 – JerryCai 2013-03-10 14:10:54

+0

看起來像一個HttpException。你可以記錄請求的URL:'Context.Request.Url'。這看起來像一些缺少的靜態文件,例如正在從瀏覽器請求的favicon.ico文件。 – 2013-03-10 16:11:51

5

ELMAH這裏是你的朋友 - 你可以使用with log4net

ELMAH(錯誤記錄模塊和處理程序)是一個完全可插入的應用程序範圍的錯誤記錄工具。它可以動態添加到正在運行的ASP.NET Web應用程序,甚至是機器上的所有ASP.NET Web應用程序,而無需重新編譯或重新部署。

您可以通過nuget配置獲得相應的軟件包。

+0

同時結帳[Glimpse](http://getglimpse.com/),它有一個[Elmah]插件(http://elmah4glimpse.codeplex.com/)。 – 2013-03-10 13:00:37

相關問題