zoukankan
html css js c++ java
asp.net错误日志写入
当我们一个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();
}
查看全文
相关阅读:
Jquery 的offset与position方法
HTML精确定位:scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解
js中对日期进行加减
EditPlus 换行
constructor属性,valueOf(),toSTring
浅谈C#增加that关键字
ASP.NET Global.ascx 事件大全
Javascript:scrollWidth,clientWidth,offsetWidth的区别
jquery val() 返回值怎么转换成 javascript 日期类型
微软宣布Entity Framework 5的性能有了显著提升
原文地址:https://www.cnblogs.com/ringwang/p/992023.html
最新文章
按需讲解之Supervisor
一些命令小贴士
一键在arm64架构上部署高可用kubernetes v1.20.0集群
Heritrix 3.1.0 源码解析(十二)
Heritrix 3.1.0 源码解析(六)
Heritrix 3.1.0 源码解析(九)
Heritrix 3.1.0 源码解析(十一)
Heritrix 3.1.0 源码解析(十四)
Heritrix 3.1.0 源码解析(八)
Heritrix 3.1.0 源码解析(七)
热门文章
Heritrix 3.1.0 源码解析(十三)
Heritrix 3.1.0 源码解析(五)
Heritrix 3.1.0 源码解析(十)
ASP.NET中Cookie编程简明参考 及 Cookie同Session的关系
window.top.location.href 和 window.location.href 的区别
javascript的日期函数
javascript的日期加减
sql where 1=1 妙用之一方面
HTML DOM rules 属性
group by、order by与having、where
Copyright © 2011-2022 走看看