首页 新闻 会员 周边

一个关于C#错误处理的问题

0
悬赏园豆:50 [已解决问题] 解决于 2012-02-09 17:55

由于以前的项目没有重视错误返回,基本上所有的try catch块里面都没有抛出异常代码,也就是catch只是捕捉到错误而没有让这个错误返回到界面上,我现在的想法是建一个类,只要catch捕捉到了异常,就会把异常日志写到这个类里面(我想由程序自动处理,而不是再到每个catch里面去加代码,那工作量太大了),然后在界面层将这个类的异常显示出来

问题补充: 没明白我的意思,现在的程序是捕捉了异常,但操作的人并不知道出现的异常,我是想捕捉异常之后把这个异常信息写到一个类里面,由这个类把异常信息返回到界面,让操作的人知道程序出错了,这样对原来程序的改动也会是最少的
jhkmnm的主页 jhkmnm | 初学一级 | 园豆:19
提问于:2010-09-08 09:46
< >
分享
最佳答案
0

在全局文件 Global.asax 中做处理。截获出现异常时的事件,并自定义处理过程。

参考下面代码,增加一个日志的写入就ok了。

void Application_Error(object sender, EventArgs e)
{
//在出现未处理的错误时运行的代码
HttpContext context = ((HttpApplication)sender).Context;

Exception ex
= context.Server.GetLastError();
if (ex == null || !(ex is HttpException) || (ex as HttpException).GetHttpCode() == 404)
return;

StringBuilder sb
= new StringBuilder();

try
{
sb.Append(
"Url : " + context.Request.Url);
sb.Append(Environment.NewLine);
sb.Append(
" Raw Url :" + context.Request.RawUrl);
sb.Append(Environment.NewLine);

while (ex != null)
{
sb.Append(
"Message : " + ex.Message);
sb.Append(Environment.NewLine);
sb.Append(
"Source : " + ex.Source);
sb.Append(Environment.NewLine);
sb.Append(
"StackTrace : " + ex.StackTrace);
sb.Append(Environment.NewLine);
sb.Append(
"TagetSite : " + ex.TargetSite);
sb.Append(Environment.NewLine);
ex
= ex.InnerException;
}
}
catch (Exception ex2)
{
sb.Append(
"Error logging error : " + ex2.Message);
}
if (OASettings.Instance.EnableErrorLogging)
Utils.Log(sb.ToString());

context.Items[
"LastErrorDetails"] = sb.ToString();
context.Response.StatusCode
= 500;
Server.ClearError();

context.Server.Transfer(
"~/error.aspx");
}
收获园豆:50
邢少 | 专家六级 |园豆:10926 | 2010-09-08 10:07
这个是不是也在没有catch的情况下才会触发
jhkmnm | 园豆:19 (初学一级) | 2010-09-08 10:28
没错、网站程序我们都是这样处理。容易控制。
HUHU慈悲 | 园豆:9973 (大侠五级) | 2010-09-08 10:44
其他回答(3)
0

楼上正解!

Ropean | 园豆:121 (初学一级) | 2010-09-08 10:15
0

你可以看看我的这篇文章:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

然后根据你的需求进行些处理。

可以写个程序在记录了异常后实时提醒。

kyo-yo | 园豆:5587 (大侠五级) | 2010-09-08 10:33
0

在配置文件中,或者一楼的做法,是在出现异常的时候,做个总操作到指定页面。但是如果你系统中已经在出异常的地方加上catch了,那就不会发生上面的操作。所以还是重构一次,自己做个异常日志记录类,在catch里调用异常处理函数。

另外再按照第一步,处理些没有发现的异常。

Astar | 园豆:40805 (高人七级) | 2010-09-08 17:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册