收集有关ASP.NET中错误的有用信息?

时间:2009-12-18 10:04:09

标签: asp.net

我正在检查我们的旧系统,并且有一种方法可以在发生异常时发送电子邮件。

看起来像这样:

        string strError = "Error in: " + Request.Path + 
            "\nUrl: " + Request.RawUrl + "\n\n";

        // Get the exception object for the last error message that occured.
        Exception ErrorInfo = Server.GetLastError().GetBaseException();
        strError += "Error Message: " + ErrorInfo.Message + 
            "\nError Source: " + ErrorInfo.Source + 
            "\nError Target Site: " + ErrorInfo.TargetSite + 
            "\n\nQueryString Data:\n-----------------\n";

        // Gathering QueryString information
        for (int i = 0; i < Context.Request.QueryString.Count; i++) 
            strError += Context.Request.QueryString.Keys[i] + ":\t\t" + Context.Request.QueryString[i] + "\n";
        strError += "\nPost Data:\n----------\n";

        // Gathering Post Data information
        for (int i = 0; i < Context.Request.Form.Count; i++) 
            strError += Context.Request.Form.Keys[i] + ":\t\t" + Context.Request.Form[i] + "\n";
        strError += "\n";

        if (User.Identity.IsAuthenticated) strError += "User:\t\t" + User.Identity.Name + "\n\n";

        strError += "Exception Stack Trace:\n----------------------\n" + Server.GetLastError().StackTrace + 
            "\n\nServer Variables:\n-----------------\n";

        // Gathering Server Variables information
        for (int i = 0; i < Context.Request.ServerVariables.Count; i++) 
            strError += Context.Request.ServerVariables.Keys[i] + ":\t\t" + Context.Request.ServerVariables[i] + "\n";
        strError += "\n";

        // Sending error message to administration via e-mail
    SmtpClient smtp = new SmtpClient();
    MailMessage email = new MailMessage();
    email.From = new MailAddress("noreply@mysite.com");
    email.To.Add("me@mysite.com");
    email.Subject = "Site error notification";
    email.Body = strError;

    smtp.Send(email);

这可能是或者可能不是很可怕,我们系统中的一些代码是令人震惊的,但我从未试图调查报告错误的最佳方法。你觉得怎么样?

3 个答案:

答案 0 :(得分:2)

您可以尝试elmah

答案 1 :(得分:2)

看起来很多网站都做了 - 这并不罕见。

有些会记录到文件系统或事件日志(有时会记录到许多不同的来源)。

这实际上取决于错误的数量,谁在看它们以及需要多少信息。

有第三方图书馆对此有所帮助,elmah是一个,Logging Application Block是另一个。

答案 2 :(得分:0)

使用电子邮件报告错误的问题在于电子邮件本身并不十分可靠。

写入Windows错误日志要好得多。然后可能有一个服务,可以查看日志和电子邮件偶尔的报告,或类似的东西。