2013-03-10 32 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

相关问题