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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie melden Sie es der EventLog. Systemadministratoren setup-überwachung, um zu sehen, wenn neue Ereignisse Hinzugefügt werden und werden bei potenziellen Problemen gewarnt.
Hier ist ein Beispiel aus der MSDN für die EventLog Klasse: