ASP.NET 오류 로그 및 오류 안내 페이지 쓰기

5449 단어 asp.net
프로그램에서 발생할 수 있는 이상에 대해try{}catch()를 사용하여 이 이상을 포획하는 것을 알고 있습니다.그러나 소프트웨어 테스트에서 모든 버그를 발견할 수 없다. 우리는 소프트웨어의 보완을 위해 많은 곳에 이상한 포획 코드를 추가할 수 없다. 그러면 코드의 군더더기와 성능이 떨어진다.
그렇다면 우리는 이런 이상과 잘못을 소홀히 할 수 있을까?
이것은 허락하지 않는 것이 분명하다.우리는 이러한 이상과 오류를 소홀히 해서는 안 될 뿐만 아니라 예상하지 못한 오류와 이상도 기록해야 한다.
그렇다면, 우리는 어떻게 이런 이상을 발견합니까?이런 이상을 발견하면 또 어떻게 기록해야 합니까?이런 이상들은 사용자에게 보여줄 수 있습니까?못 보면 어떻게 해야 하나요?
위의 의문을 해결하는 데는 로그와 오류 안내 페이지가 사용됩니다.우리는 이상과 오류를 기록해야 하며, 오류 내용을 사용자에게 보여서는 안 되며, 사용자는 우호적인 오류 안내 페이지만 있을 수 있습니다.
여기에서, 나의 오류 관리 페이지와 로그 기록은 모두 글로벌에 쓰여 있습니다.asax.cs클래스에서 Application을 통해Error 함수가 완성되었습니다.Global.asax.cs 코드:
public class Global : System.Web.HttpApplication
    {
       protected void Application_Start(object sender, EventArgs e)
        {
        }
        protected void Session_Start(object sender, EventArgs e)
        {
        }
        protected void Application_BeginRequest(object sender, EventArgs e)
        {
        }
        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
        }
        protected void Application_Error(object sender, EventArgs e)
        {
            Exception ex = Server.GetLastError();
            string strIP = Request.UserHostAddress;
            string err = "Ip【" + strIP + "】" + Environment.NewLine + "Error in
【" + Request.Url.ToString() + "】" + Environment.NewLine + 
"Error Message【" + ex.Message.ToString() + "】";
            //    
            Global.WriteError(err);
            if (ex is HttpException)
            {
                if (((HttpException)ex).GetHttpCode() == 404)
                {
                    Server.Transfer("ErrorPage.aspx", false);
                }
            }
        }
        protected void Session_End(object sender, EventArgs e)
        {
        }
        protected void Application_End(object sender, EventArgs e)
        {
        }
        #region     
        /// 
        ///     
        /// 
        /// 
        public static void WriteError(string errorMessage)
        {
            try
            {
                string path = "Error/" + DateTime.Today.ToString("yyyyMMdd") + ".txt";
                if (!File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))
                {
                    File.Create(System.Web.HttpContext.Current.Server.MapPath(path)).Close();
                }
                using (StreamWriter w = File.AppendText
(System.Web.HttpContext.Current.Server.MapPath(path)))
                {
                    w.WriteLine("\r
Log Entry : "); w.WriteLine("{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture)); w.WriteLine(errorMessage); w.WriteLine("________________________________________________________"); w.Flush(); w.Close(); } } catch (Exception ex) { WriteError(ex.Message); } } #endregion }

오류 부트 페이지:ErrorPage.aspx

 
 
      
  404-    
  
// <!CDATA[
// ]]>
   
  

ErrorPage.aspx.cs 
  protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            lblMsg.Text = Application["error"].ToString() + "

, 。"; Server.ClearError(); } } protected void Button1_Click(object sender, EventArgs e) { Response.Redirect("~/Login.aspx"); }


Application_Error는 처리되지 않은 생각지도 못한 이상try를 잡기 위해...catch...또한 포지셔닝 오류의 유형과 정보를 정확하게 파악하기 위해 정확한 알림 정보를 제시해야 한다.
물론 오류 안내 페이지의 추가도 설정 파일에서 완성할 수 있습니다

            
            
        

총괄:글로벌.asax.cs류에는 또 다른 방법이 있습니다. 우리는 일부 방법에 개성 코드를 추가할 수 있습니다.

좋은 웹페이지 즐겨찾기