【问题标题】:Not all errors catched by global.asax C#并非 global.asax C# 捕获的所有错误
【发布时间】:2012-10-31 04:59:55
【问题描述】:

我正在尝试捕获所有错误,除了 global.asax 文件中的 '404-File not found' 错误并写入服务器中的文本文件,但是很多错误都被遗漏了,例如 FormatException Error,Sessionout Error和“错误黄页”出现!

如何在这里捕获所有错误。

void Application_Error(object sender, EventArgs e) 
{
    CT.Bussiness.DevCommonFunctions devTools = new CT.Bussiness.DevCommonFunctions();
    HttpContext ctx = HttpContext.Current;
    //ctx.Response.
    // Get page url
    if (ctx != null)
    {
        string pageName = ctx.Request.Url.ToString();

        Exception ex = Server.GetLastError().GetBaseException();
        HttpException checkException = (HttpException)ex;
        if (checkException.GetHttpCode() != 404)
        {
            string errorDate = DateTime.Now.ToString();
            //string pageName =pageName;
            string errorMessage = ex.Message;
            string errorSource = ex.Source;
            //string errorInnerException=ex.InnerException.ToString();
            string errorData = ex.Data.ToString();
            string errorTarget = ex.TargetSite.ToString();
            string errorStack = ex.StackTrace.ToString();
            devTools.WriteErrorsIntoErrorLog(errorDate, pageName, errorMessage, errorSource, "InnerException", errorData, errorTarget, errorStack);
            //devTools.SendErrorMail("developer3@devwebservices.net,developer4@devwebservices.net,developer5@devwebservices.net,hr@devwebservices.net", errorDate, pageName, errorMessage, errorSource, "InnerException", errorData, errorTarget, errorStack);
            //Response.TrySkipIisCustomErrors = true;
            Response.Redirect("~/Error.aspx");
            //Response.Redirect("Error.aspx");

        }
    }
}

已解决

我按照 KPL 的建议如下:

  1. 实施了 Elmah
  2. 排除 Global.asax 和
  3. 在 web.config 中编写了重定向代码。

这样解决了!

【问题讨论】:

    标签: c# error-handling global-asax elmah


    【解决方案1】:

    用途:

    1.) web.config "customErrors" 标签避免出现“错误黄页”:

    <customErrors mode="On" defaultRedirect="~/Error.aspx">
          <error statusCode="400" redirect="/error/400-bad-request/" />
          <error statusCode="404" redirect="/error/404-file-not-found/" />
          <error statusCode="500" redirect="/error/500-server-error/" />
    </customErrors>
    

    2.) 也可以尝试使用Elmah 记录错误。

    ELMAH(错误记录模块和处理程序) 是一个应用程序范围的错误记录工具,它是完全可插拔的。它可以动态添加到正在运行的 ASP.NET Web 应用程序,甚至是一台机器上的所有 ASP.NET Web 应用程序,无需重新编译或重新部署。

    一旦将 ELMAH 放入正在运行的 Web 应用程序并进行适当配置,您就可以获得以下功能,而无需更改任何一行代码:

    • 记录几乎所有未处理的异常。
    • 用于远程查看重新编码异常的整个日志的网页。
    • 用于远程查看任何记录的异常的完整详细信息的网页,包括彩色堆栈跟踪。
    • 在许多情况下,即使关闭了 customErrors 模式,您也可以查看 ASP.NET 为给定异常生成的原始黄屏死机。
    • 每个错误发生时的电子邮件通知。
    • 来自日志的最后 15 个错误的 RSS 提要。

    【讨论】:

    • 感谢 KPL,我长期听到 Elmah,在这里我:1. 实施 Elmah 2. 排除 Global.asax 和 3. 在 web.config 中编写重定向代码。就这样解决了!
    猜你喜欢
    • 2013-02-16
    • 2012-03-31
    • 2012-04-21
    • 2015-04-30
    • 2011-09-25
    • 1970-01-01
    • 2011-05-17
    • 2011-03-14
    相关资源
    最近更新 更多