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();
}
查看全文
相关阅读:
[读书笔记] 树莓派 raspberry pi cluster的搭建实践
[学姿势了] bmp当中插入javascript code
[读书笔记] 两则之一: Smarter video searching and indexing 更为智能的视频搜索和索引技术
[读书笔记] 两则之一: 100Gbps传输
[无知故学习]范式HUFFMAN coding
[学习笔记]关于CUDA与OPENCL
[以资鼓励]用于提醒,未来如果在我这台optimus + gtm540的acer NV47H75C上安pnv驱动
转: Beautiful Numbers (费马小定理)
Bear and String Distance (贪心 )
zoj3946--Highway Project
原文地址:https://www.cnblogs.com/ringwang/p/992023.html
最新文章
Difference Between BLOCKED, WAITING, And TIMED_WAITING?
Java线程的6种状态及切换
Mac下安装jenkins
Mac--Launchctl介绍
数据库弱一致性四个隔离级别
Spring的启动过程
javaweb学习总结(四)——Http协议
数据结构之图的创建,广搜和深搜
数据结构之图的链表表示
C++单元测试工具之CPPUnit使用
热门文章
51nod 1368:黑白棋 二分图最大匹配
51nod 1445:变色DNA 最短路变形
POJ 3685:Matrix 二分
POJ 3233:Matrix Power Series 矩阵快速幂 乘积
POJ 3259:Wormholes bellman_ford判定负环
POJ 3267:The Cow Lexicon 字符串匹配dp
51nod 1444:破坏道路 广度优先搜索
POJ 3268:Silver Cow Party 求单点的来回最短路径
POJ 3273:Monthly Expense 二分好题啊啊啊啊啊啊
POJ 3274:Gold Balanced Lineup 做了两个小时的哈希
Copyright © 2011-2022 走看看