当我们一个web项目开发已完成,测试也通过了后,就把他放到网上去,但是,bug是测不完的,特别是在一个大的网络环境下。那么,我们就应该记录这些错误,然后改正。这里,我的出错管理页面是在global.asax里面的,因为里面有一个Application_Error函数,我觉得这个就是管理错误的。其实,asp.net里还有一个方法,就是在 page 里指定出错的页面,由这个页面专门管理,我觉得这个方法也好,但是每次都要到相应的page里指定参数,不过,我觉得应该可以在web.config里配置吧。但是我还是喜欢下面的方法。下面我们就开始吧。
Global.asax代码:
InBlock.gif<%@ Application Language= "C#" %>
InBlock.gif
InBlock.gif<script runat= "server">
InBlock.gif
InBlock.gif         void Application_Start( object sender, EventArgs e)    
InBlock.gif        {
InBlock.gif                 // 在应用程序启动时运行的代码
InBlock.gif
InBlock.gif        }
InBlock.gif        
InBlock.gif         void Application_End( object sender, EventArgs e)    
InBlock.gif        {
InBlock.gif                 //    在应用程序关闭时运行的代码
InBlock.gif
InBlock.gif        }
InBlock.gif                
InBlock.gif         void Application_Error( object sender, EventArgs e)    
InBlock.gif        {    
InBlock.gif                 // 在出现未处理的错误时运行的代码
InBlock.gif                
InBlock.gif                        Exception objErr = Server.GetLastError().GetBaseException();
InBlock.gif                         string error = string.Empty;
InBlock.gif                         string errortime = string.Empty;
InBlock.gif                         string erroraddr = string.Empty;
InBlock.gif                         string errorinfo = string.Empty;
InBlock.gif                         string errorsource = string.Empty;
InBlock.gif                         string errortrace = string.Empty;
InBlock.gif
InBlock.gif                        error += "发生时间:" + System.DateTime.Now.ToString() + "<br>";
InBlock.gif                        errortime = "发生时间:" + System.DateTime.Now.ToString();
InBlock.gif
InBlock.gif                        error += "发生异常页: " + Request.Url.ToString() + "<br>";
InBlock.gif                        erroraddr = "发生异常页: " + Request.Url.ToString();
InBlock.gif
InBlock.gif                        error += "异常信息: " + objErr.Message + "<br>";
InBlock.gif                        errorinfo = "异常信息: " + objErr.Message;
InBlock.gif
InBlock.gif                         //error +="错误源:"+objErr.Source+"<br>";
InBlock.gif                         //error += "堆栈信息:" + objErr.StackTrace + "<br>";
InBlock.gif                        errorsource = "错误源:" + objErr.Source;
InBlock.gif                        errortrace = "堆栈信息:" + objErr.StackTrace;
InBlock.gif                        error += "--------------------------------------<br>";
InBlock.gif                        Server.ClearError();
InBlock.gif                        Application[ "error"] = error;
InBlock.gif
InBlock.gif                         //独占方式,因为文件只能由一个进程写入.
InBlock.gif                     System.IO.StreamWriter writer= null;
InBlock.gif                         try
InBlock.gif                        {                                
InBlock.gif                                 lock ( this)
InBlock.gif                                {
InBlock.gif                                         // 写入日志
InBlock.gif                                         string year = DateTime.Now.Year.ToString();
InBlock.gif                                         string month = DateTime.Now.Month.ToString();
InBlock.gif                                         string path = string.Empty;
InBlock.gif                                         string filename = DateTime.Now.Day.ToString() + ".txt";
InBlock.gif                                        path = Server.MapPath( "~/Error/") + year + "/" + month;
InBlock.gif                                         //如果目录不存在则创建
InBlock.gif                                         if (!System.IO.Directory.Exists(path))
InBlock.gif                                        {
InBlock.gif                                                System.IO.Directory.CreateDirectory(path);
InBlock.gif                                        }
InBlock.gif                                        System.IO.FileInfo file = new System.IO.FileInfo(path + "/" + filename);
InBlock.gif                                         //if (!file.Exists)
InBlock.gif                                         //        file.Create();
InBlock.gif                                         //file.Open(System.IO.FileMode.Append);                
InBlock.gif                                        writer = new System.IO.StreamWriter(file.FullName, true); //文件不存在就创建,true表示追加
InBlock.gif                                        writer.WriteLine( "用户IP:" + Request.UserHostAddress);
InBlock.gif                                         //if (Session["UserName"] != null)
InBlock.gif                                         //{
InBlock.gif                                         //        writer.WriteLine("用户名" + System.Web.HttpContext.Current.Session["UserName"].ToString());
InBlock.gif                                         //}
InBlock.gif                                        writer.WriteLine(errortime);
InBlock.gif                                        writer.WriteLine(erroraddr);
InBlock.gif                                        writer.WriteLine(errorinfo);
InBlock.gif                                        writer.WriteLine(errorsource);
InBlock.gif                                        writer.WriteLine(errortrace);
InBlock.gif                                        writer.WriteLine( "--------------------------------------------------------------------------------------");
InBlock.gif                                         //writer.Close();
InBlock.gif                                }
InBlock.gif                        }
InBlock.gif                         finally    
InBlock.gif                        {
InBlock.gif                                 if (writer != null)
InBlock.gif                                        writer.Close();
InBlock.gif                                        
InBlock.gif                        }        
InBlock.gif                        Response.Redirect( "~/Error/ErrorPage.aspx");
InBlock.gif                
InBlock.gif
InBlock.gif        }
InBlock.gif
InBlock.gif         void Session_Start( object sender, EventArgs e)    
InBlock.gif        {
InBlock.gif                 // 在新会话启动时运行的代码
InBlock.gif                Session.Timeout = 60;                
InBlock.gif                 if (Session.IsNewSession)
InBlock.gif                {
InBlock.gif                         lock ( this)
InBlock.gif                        {
InBlock.gif                                 if (Application[ "Counts"] != null)
InBlock.gif                                {
InBlock.gif                                        Application[ "Counts"] = Int32.Parse(Application[ "Counts"].ToString()) + 1;
InBlock.gif                                }
InBlock.gif                                 else
InBlock.gif                                {
InBlock.gif                                        Application[ "Counts"] = 1;
InBlock.gif                                }
InBlock.gif                        }
InBlock.gif                }
InBlock.gif        }
InBlock.gif
InBlock.gif         void Session_End( object sender, EventArgs e)    
InBlock.gif        {
InBlock.gif                 // 在会话结束时运行的代码。    
InBlock.gif                 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
InBlock.gif                 // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer    
InBlock.gif                 // 或 SQLServer,则不会引发该事件。
InBlock.gif                 if (Application[ "Counts"] != null)
InBlock.gif                {
InBlock.gif                        Application[ "Counts"] = Int32.Parse(Application[ "Counts"].ToString())-1;
InBlock.gif                }                
InBlock.gif        }
InBlock.gif                
InBlock.gif</script>
显示出错信息的页面
ErrorPage.aspx代码:
< %@ Page Language ="C#" AutoEventWireup ="true" CodeFile ="ErrorPage.aspx.cs" Inherits ="Error_ErrorPage" % >

< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
         < title >出错信息 </title>
         < link href ="css/SITE.CSS" type ="text/css" rel ="stylesheet" />        
</head>
< body >
         < form id ="form1" runat ="server" >
                 < asp:Label ID ="Label1" runat ="server" Width ="568px" > </asp:Label>
        
         </form>
</body>
</html>
ErrorPage.aspx.cs
InBlock.gif protected void Page_Load( object sender, EventArgs e)
InBlock.gif        {
InBlock.gif                 this.Label1.Text = Application[ "Error"].ToString();
InBlock.gif        }