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

使用Global.asax在ASP.NET中记录错误日志

2009-05-17 13:49 351 查看
完整的Glabal.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["Identity"] != null)

// {

// writer.WriteLine("登录帐号:" System.Web.HttpContext.Current.Session["Identity"]).YongHuInfo.ACCOUNTID);

// }

writer.WriteLine(errortime);

writer.WriteLine(erroraddr);

writer.WriteLine(errorinfo);

writer.WriteLine(errorsource);

writer.WriteLine(errortrace);

writer.WriteLine("【this Error From http://hi.baidu.com/yanwei99521】");
writer.WriteLine("--------------------------------------------------------------------------------------");

}

}

finally

{

if (writer != null)

writer.Close();

}

Response.Redirect("~/ErrorPageByPurview.aspx?ErrorCode=004");

}

void Session_Start(object sender, EventArgs e)

{

// 在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)

{

// 在会话结束时运行的代码。

// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为

// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer

// 或 SQLServer,则不会引发该事件。

}

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