0

現在、グローバル asax に以下のコードがあります。例外ログをデータベースに保存したいのですが、これは良い方法ですか? そこでSQLエラーが発生した場合は、それもログに記録したいからです。そのため、以下のコードを変更して、電子メールの代わりにテキスト ログを書き込んでから、SQL エラーでテキスト ログを書き出すことを考えています。

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("errors@karpach.com", "ErrorManager");
        email.To.Add(new System.Net.Mail.MailAddress("errornotification@karpach.com", "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();
            }
        }
    }
 }
4

1 に答える 1

1

EventLogに記録できます。システム管理者は、新しいイベントが追加されたときに監視を設定し、潜在的な問題について警告を受けることができます。

EventLogクラスの MSDN の例を次に示します。

if(!EventLog.SourceExists("MySource"))
{
    //An event log source should not be created and immediately used. 
    //There is a latency time to enable the source, it should be created 
    //prior to executing the application that uses the source. 
    //Execute this sample a second time to use the new source.
    EventLog.CreateEventSource("MySource", "MyNewLog");
    Console.WriteLine("CreatedEventSource");
    Console.WriteLine("Exiting, execute the application a second time to use the source.");
    // The source is created.  Exit the application to allow it to be registered. 
    return;
}

// Create an EventLog instance and assign its source.
EventLog myLog = new EventLog();
myLog.Source = "MySource";

// Write an informational entry to the event log.    
myLog.WriteEntry("Writing to event log.");
于 2013-01-30T20:29:17.957 に答える