2012-11-11 32 views
3

我想弄清楚一种方法来捕获网站上的所有异常并存储它们,以及问题是我不想去尝试抓住一切。捕捉网站上的所有异常最好的方法

我已经想出了自定义错误页面的解决方案,我正在这样做,但是我想以管理员身份知道用户何时遇到错误以及出现了什么错误。我知道必须有一种方法来全局获取所有异常并将其存储。

我一直在寻找一种解决方案,或者至少在某些方面指向正确的方式几天,但我所发现的一切都是笨拙的做法。

所以我的问题是。有没有一站式商店这种事情?我是否可以捕获异常并在一个地方执行存储过程,而无需在解决方案中为每个类添加内容?在那种情况下,我在哪里运行我的存储过程?

回答

2

添加Global.asax文件到您的asp.net项目和处理应用程序错误:

void Application_Error(object sender, EventArgs e) 
    { 
     Exception ex = Server.GetLastError(); 
     string errorMessage = "Application Exception: " + ex.Message; 
     if (ex.InnerException != null) 
     { 
      errorMessage += Environment.NewLine + "Inner Exception: " + ex.InnerException.Message; 
     } 
     if (Context != null && Context.Request != null) 
     { 
      errorMessage += Environment.NewLine + "Absolute Url: " + Context.Request.Url.AbsolutePath; 
     } 
     Services.LoggerManager.Log(
      Services.LoggerManager.eLogContext.Application, 
      Services.LoggerManager.eLogType.Error, 
      Context, errorMessage); 
    } 

这里是LoggerManager部分:

public static class LoggerManager 
{ 

    public enum eLogType 
    { 
     Information = 0, 
     Warning = 1, 
     Error = 2 
    } 

    public enum eLogContext 
    { 
     Application = 0, 
     Session = 1 
    } 

    /// <summary> 
    /// Method for logging custom message 
    /// </summary> 
    /// <param name="logContext"></param> 
    /// <param name="logType"></param> 
    /// <param name="context"></param> 
    /// <param name="message"></param> 
    public static void Log(eLogContext logContext, eLogType logType, HttpContext context, string message) 
    { 
     switch (logContext) 
     { 
      case eLogContext.Application: 
       //TODO: log application type event... 
       break; 
      case eLogContext.Session: 
       //TODO: log session type event... 
       break; 
      default: 
       throw new NotImplementedException("eLogContext '" + logContext.ToString() + "' is not implemented!"); 
     } 
    } 

} 
+0

如果我想一个警告可能我只是添加Application_Warning (对象发件人,EventArgs e)到global.asax? –

+0

不是。 Global.asax不支持此事件。但是,您可以处理特定的asp.net页面内的异常,然后调用LoggerManager.Log( Services.LoggerManager.eLogContext.Application, Services.LoggerManager.eLogType.Warning, Context,warningMessage); –

+0

我想要说明一点,我必须在每次使用**的地方使用throw代码**尝试**和** catch ** –

1

我建议在ELMAH http://code.google.com/p/elmah/考虑看看

这是非常受欢迎的,并提供从nuget也。它旨在很容易地捕捉和管理所有错误。如果你不想自己管理错误,我强烈推荐它。