<%@ 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>