ASP.NET - ASP.NET错误日志写入

当我们一个web项目开发已完成,测试也通过了后,就把他放到网上去,但是,bug是测不完的,特别是在一个大的网络环境下。那么,我们就应该记录这些错误,然后改正。这里,我的出错管理页面是在global.asax里面的,因为里面有一个Application_Error函数,我觉得这个就是管理错误的。其实,asp.net里还有一个方法,就是在 page 里指定出错的页面,由这个页面专门管理,我觉得这个方法也好,但是每次都要到相应的page里指定参数,不过,我觉得应该可以在web.config里配置吧。但是我还是喜欢下面的方法。下面我们就开始吧。
Global.asax代码:
<%@ Application Language= "C#" %>

<script runat= "server">

         void Application_Start( object sender, EventArgs e)    
        {
                 // 在应用程序启动时运行的代码

        }
        
         void Application_End( object sender, EventArgs e)    
        {
                 //    在应用程序关闭时运行的代码

        }
                
         void Application_Error( object sender, EventArgs e)    
        {    
                 // 在出现未处理的错误时运行的代码
                
                        Exception objErr = Server.GetLastError().GetBaseException();
                         string error = string.Empty;
                         string errortime = string.Empty;
                         string erroraddr = string.Empty;
                         string errorinfo = string.Empty;
                         string errorsource = string.Empty;
                         string errortrace = string.Empty;

                        error += "发生时间:" + System.DateTime.Now.ToString() + "<br>";
                        errortime = "发生时间:" + System.DateTime.Now.ToString();

                        error += "发生异常页: " + Request.Url.ToString() + "<br>";
                        erroraddr = "发生异常页: " + Request.Url.ToString();

                        error += "异常信息: " + objErr.Message + "<br>";
                        errorinfo = "异常信息: " + objErr.Message;

                         //error +="错误源:"+objErr.Source+"<br>";
                         //error += "堆栈信息:" + objErr.StackTrace + "<br>";
                        errorsource = "错误源:" + objErr.Source;
                        errortrace = "堆栈信息:" + objErr.StackTrace;
                        error += "--------------------------------------<br>";
                        Server.ClearError();
                        Application[ "error"] = error;

                         //独占方式,因为文件只能由一个进程写入.
                     System.IO.StreamWriter writer= null;
                         try
                        {                                
                                 lock ( this)
                                {
                                         // 写入日志
                                         string year = DateTime.Now.Year.ToString();
                                         string month = DateTime.Now.Month.ToString();
                                         string path = string.Empty;
                                         string filename = DateTime.Now.Day.ToString() + ".txt";
                                        path = Server.MapPath( "~/Error/") + year + "/" + month;
                                         //如果目录不存在则创建
                                         if (!System.IO.Directory.Exists(path))
                                        {
                                                System.IO.Directory.CreateDirectory(path);
                                        }
                                        System.IO.FileInfo file = new System.IO.FileInfo(path + "/" + filename);
                                         //if (!file.Exists)
                                         //        file.Create();
                                         //file.Open(System.IO.FileMode.Append);                
                                        writer = new System.IO.StreamWriter(file.FullName, true); //文件不存在就创建,true表示追加
                                        writer.WriteLine( "用户IP:" + Request.UserHostAddress);
                                         //if (Session["UserName"] != null)
                                         //{
                                         //        writer.WriteLine("用户名" + System.Web.HttpContext.Current.Session["UserName"].ToString());
                                         //}
                                        writer.WriteLine(errortime);
                                        writer.WriteLine(erroraddr);
                                        writer.WriteLine(errorinfo);
                                        writer.WriteLine(errorsource);
                                        writer.WriteLine(errortrace);
                                        writer.WriteLine( "--------------------------------------------------------------------------------------");
                                         //writer.Close();
                                }
                        }
                         finally    
                        {
                                 if (writer != null)
                                        writer.Close();
                                        
                        }        
                        Response.Redirect( "~/Error/ErrorPage.aspx");
                

        }

         void Session_Start( object sender, EventArgs e)    
        {
                 // 在新会话启动时运行的代码
                Session.Timeout = 60;                
                 if (Session.IsNewSession)
                {
                         lock ( this)
                        {
                                 if (Application[ "Counts"] != null)
                                {
                                        Application[ "Counts"] = Int32.Parse(Application[ "Counts"].ToString()) + 1;
                                }
                                 else
                                {
                                        Application[ "Counts"] = 1;
                                }
                        }
                }
        }

         void Session_End( object sender, EventArgs e)    
        {
                 // 在会话结束时运行的代码。    
                 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
                 // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer    
                 // 或 SQLServer,则不会引发该事件。
                 if (Application[ "Counts"] != null)
                {
                        Application[ "Counts"] = Int32.Parse(Application[ "Counts"].ToString())-1;
                }                
        }
                
</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
protected void Page_Load( object sender, EventArgs e)
        {
                 this.Label1.Text = Application[ "Error"].ToString();
        }

你可能感兴趣的:(日志,职场,net,asp,休闲)