asp.net错误日志写入

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

< scriptrunat = " server " >

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

}


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

}


void Application_Error( object sender,EventArgse)
{
//在出现未处理的错误时运行的代码

ExceptionobjErr
=Server.GetLastError().GetBaseException();
stringerror=string.Empty;
stringerrortime=string.Empty;
stringerroraddr=string.Empty;
stringerrorinfo=string.Empty;
stringerrorsource=string.Empty;
stringerrortrace=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.StreamWriterwriter=null;
try
{
lock(this)
{
//写入日志
stringyear=DateTime.Now.Year.ToString();
stringmonth=DateTime.Now.Month.ToString();
stringpath=string.Empty;
stringfilename=DateTime.Now.Day.ToString()+".txt";
path
=Server.MapPath("~/Error/")+year+"/"+month;
//如果目录不存在则创建
if(!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);
}

System.IO.FileInfofile
=newSystem.IO.FileInfo(path+"/"+filename);
//if(!file.Exists)
//file.Create();
//file.Open(System.IO.FileMode.Append);
writer=newSystem.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,EventArgse)
{
//在新会话启动时运行的代码
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,EventArgse)
{
//在会话结束时运行的代码。
//注意:只有在Web.config文件中的sessionstate模式设置为
//InProc时,才会引发Session_End事件。如果会话模式设置为StateServer
//或SQLServer,则不会引发该事件。
if(Application["Counts"]!=null)
{
Application[
"Counts"]=Int32.Parse(Application["Counts"].ToString())-1;
}

}


</ script >

显示出错信息的页面
ErrorPage.aspx代码:
<% @PageLanguage = " C# " AutoEventWireup = " true " CodeFile = " ErrorPage.aspx.cs " Inherits = " Error_ErrorPage " %>

<! DOCTYPEhtmlPUBLIC " -//W3C//DTDXHTML1.0Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >

< htmlxmlns = " http://www.w3.org/1999/xhtml " >
< headrunat = " server " >
< title > 出错信息 </ title >
< linkhref = " css/SITE.CSS " type = " text/css " rel = " stylesheet " />
</ head >
< body >
< formid = " form1 " runat = " server " >
< asp:LabelID = " Label1 " runat = " server " Width = " 568px " ></ asp:Label >

</ form >
</ body >
</ html >

ErrorPage.aspx.cs
protected void Page_Load( object sender,EventArgse)
{
this.Label1.Text=Application["Error"].ToString();
}

你可能感兴趣的:(asp.net)