您的位置:首页 > 编程语言 > ASP

asp.net错误日志写入

2009-01-07 15:55 369 查看
当我们一个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();


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: