Best-practice-Fehlerbehandlung in der Global asax

Habe ich folgenden code in der global asax jetzt will ich speichern, exception-log in der Datenbank, ist diese gute Praxis? denn wenn sql-Fehler da passiert, ich möchte melden es auch. Also ich denke ändern Sie den code unten, text zu schreiben, melden Sie stattdessen E-Mail, dann auf sql-Fehler an, schreiben text-log.

void Application_Error(object sender, EventArgs e)
 {
    //Code that runs when an unhandled error occurs
    string testEnvironment = ConfigurationSettings.AppSettings["isTestEnvironment"];
    if (testEnvironment == "0")
    {
        Exception ex = Server.GetLastError();
         if (ex is HttpException && ex.InnerException is ViewStateException)
        {
          Response.Redirect(Request.Url.AbsoluteUri)                
          return
        }
        StringBuilder theBody = new StringBuilder();
        theBody.Append("URL: " + Request.Url + "\n");
        theBody.Append("Referer: " + Request.ServerVariables["HTTP_REFERER"] + "\n");
        theBody.Append("IP: " + Request.ServerVariables["REMOTE_HOST"] + "\n");
        theBody.Append("Error Message: " + ex.ToString() + "\n");
        if (User.Identity.IsAuthenticated)
            theBody.Append("User: " + User.Identity.Name + "\n");
        else
            theBody.Append("User is not logged in." + "\n");
        theBody.Append("Form Values: " + "\n");
        foreach (string s in Request.Form.AllKeys)
        {
            if (s != "__VIEWSTATE")
                theBody.Append(s + ":" + Request.Form[s] + "\n");
        }
        theBody.Append("Session Values: " + "\n");
        foreach (string s in Session.Keys)
            theBody.Append(s + ":" + Session[s] + "\n");
        System.Net.Mail.MailMessage email = new System.Net.Mail.MailMessage();
        email.IsBodyHtml = false;
        email.From = new System.Net.Mail.MailAddress("[email protected]", "ErrorManager");
        email.To.Add(new System.Net.Mail.MailAddress("[email protected]", "Developer"));
        email.Subject = Request.Url.ToString().Split('/')[2] + " has ASP.NET error";
        email.Body = theBody.ToString();
        try
        {
            System.Net.Mail.SmtpClient emailProvider = new System.Net.Mail.SmtpClient();
            emailProvider.Send(email);
        }
        catch (Exception anException)
        {
        }
        finally
        {
            if (Request.Url.Segments[Request.Url.Segments.Length - 1].ToLower() != "error.aspx")
                Response.Redirect("~/error.aspx?msg=4");
            else
            {
                Response.Write(@"We encountered an internal error. We apologize for any inconvenience
                but know that our staff gets emailed EVERY error that occurs so that we can solve it promptly.");
                Response.End();
            }
        }
    }
 }
  • Meine einzige wirkliche Vorschlag, um Fehler zu protokollieren, um dort, wo jemand tatsächlich Lesen Sie, wo das ist. Bei einem früheren job, wir protokolliert, was sowohl auf Datei und in der DB, aber kein Entwickler jemals sah Sie an, es sei denn, ein Kunde rief an und beschwerte sich, also war es alles ziemlich wertlos.
InformationsquelleAutor Diggie | 2013-01-30
Schreibe einen Kommentar