3

我试图找出一种方法来捕获站点上的所有异常并存储它们,问题是我不想去尝试捕获所有内容。

我已经找到了自定义错误页面的解决方法,我正在这样做,但我想作为管理员知道用户何时遇到错误,以及什么错误。而且我知道必须有一种方法可以全局获取所有异常并存储它们。

几天来,我一直在寻找解决方案,或者至少是一些正确的方法,但我发现的只是笨拙的方法。

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

4

3 回答 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!");
        }
    }

}
于 2012-11-11T13:26:21.770 回答
1

在 Global.asax 中,使用此事件

void Application_Error(object sender, EventArgs e)

这是一个包含更多详细信息的链接http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx

于 2012-11-11T12:55:58.460 回答
1

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

它非常受欢迎,也可以从 nuget 获得。它旨在非常轻松地捕获和管理所有错误。如果您不想自己管理错误,我强烈推荐它。

于 2012-11-11T13:17:17.820 回答