- 当我们一个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();
- }
asp.net错误日志写入
最新推荐文章于 2020-11-15 16:52:11 发布