原文:http://www.dotnetcurry.com/ShowArticle.aspx?ID=94&AspxAutoDetectCookieSupport=1

使用ASP.NET 2.0记录错误

  在我们开发和操作一个网站的过程中不可避免会发生错误和失败的情况. ASP.NET 2.0 提供了跟踪,instrumentation以及错误处理机制来检测和修补程序中的问题.

  在本文中,我们将通过一个简单的处理来记录在我们的网站中的错误和异常.我们会这样操作:每当遇到程序错误时,将使用者导航到一个单独的页面.同时,错误将被记录到服务器上的一个文本文件.每当错误发生时,我们将以日志的形式每天记录.说了这么多,让我们来看一些代码.

  步骤一:首先创建一个错误文件夹用于存放错误日志文件.鼠标右键站点 > 创建新文件夹.将该文件夹命名为"Error". 如果站点中没有 Web.config 文件时,请添加一个. 右键站点 > 添加新项目 > Web.config.

  步骤二:现在我们要创建一个错误处理的代码.我们只需要右键站点 > 添加新项目 > 选择类. 重命名该类为"ErrHandler.cs" ,然后单击 "添加" 按钮.当你这么操作的时候,会弹出一个对话框,是否要将这个类文件保存在"App_Code"里面,我们选择接受.

  步骤三:现在我们为ErrHandler.class添加一些功能.该类用于接受错误信息并将错误信息保存在一个文本文件中.每天创建一个这样的文本文件.如果已经存在相同的文件名时,错误信息将会追加到这个文件中.否则,就创建一个新文件,并将错误信息写入该文件.

  代码看来如下:

    /// Handles error by accepting the error message 
    /// Displays the page on which the error occured
    public static void WriteError(string errorMessage)
    {
        try
        {
            string path = "~/Error/" + DateTime.Today.ToString("dd-mm-yy") + ".txt";
            if (!File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))
            {
                File.Create(System.Web.HttpContext.Current.Server.MapPath(path)).
Close();
            }
            using (StreamWriter w = File.AppendText(System.Web.HttpContext.Curre
nt.Server.MapPath(path)))
            {
                w.WriteLine("\r\nLog Entry : ");
                w.WriteLine("{0}", DateTime.Now.ToString(CultureInfo.InvariantCulture
));
                string err = "Error in: " + System.Web.HttpContext.Current.Request.Url.
ToString() +
                              ". Error Message:" + errorMessage;
                w.WriteLine(err);
                w.WriteLine("__________________________");
                w.Flush();
                w.Close();
            }
        }
        catch (Exception ex)
        {
            WriteError(ex.Message);
        }
    }

  这就是我们的ErrHandler类了.然后我们来看看如何使用这个类和在Page级中(Application级中)处理错误.

在Page级中处理错误

  在Default.aspx中,从工具箱中添加一个button控件.将这个button命名为 btnError 并设置值为 "Throw Handled Exception".我们将抛出一个异常.只要我们定义了 catch 块,当错误发生时,就会被捕捉到并登记在Error文件夹中.文本文件将以当天的日期作为文件名,不存在文件时,一个新的文件将会被以下代码所创建.

按钮点击操作代码如下:

protected void btnHandled_Click(object sender, EventArgs e)
    {
        try
        {
            throw new Exception("Sample Exception");
        }
        catch (Exception ex)
        {
            // Log the error to a text file in the Error folder
            ErrHandler.WriteError(ex.Message);
        }
    }

  现在,运行程序,并点击按钮.因为我们已经在代码中处理了错误和记录下了异常,你会发现当点击按钮时,似乎什么也没发生.关闭程序,刷新Error文件夹,你会看到有个以今天日期为文件名的新文件被创建.异常已经被成功记录下如下所示.其中日期和时间在您的机器上会有所不同.

Log Entry :
01/11/2008 23:33:46
Error in: http://localhost:51087/ErrorHandling/Default.aspx. Error Message:Sample Exception
__________________________

Redirecting users on unhandled errors(在未有处理错误情况下重定向用户)

  让我们看看如何在Application级上来捕捉未有错误处理而发生的错误,并将用户定向到一个不同的页面.

  要捕捉到未有错误处理的错误,只需做以下的工作即可.添加一个 Global.asax 文件(右键工程项目 > Add New Item > Glabal.asax).在当中的 Application_Error() 方法中,增加以下代码:

 void Application_Error(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs
        Exception objErr = Server.GetLastError().GetBaseException();
        string err = "Error in: " + Request.Url.ToString() +
                          ". Error Message:" + objErr.Message.ToString();
        // Log the error
        ErrHandler.WriteError(err);        
    }

  我们注意到通过使用 Server.GetLastError() 函数来捕捉错误.当一个未有错误处理的错误发生时,要将用户重定向到不同的页面,我们要做的是,打开你的 Web.config 文件,并定位到 标签处并注销它.在移除注释后,标签看来应该是这样的:

<!--            The <customErrors> section enables configuration             of what to do if/when an unhandled error occurs             during the execution of a request. Specifically,             it enables developers to configure html error pages             to be displayed in place of a error stack trace.        -->

<customErrorsmode="RemoteOnly"defaultRedirect="GenericErrorPage.htm"><errorstatusCode="403"redirect="NoAccess.htm" /><errorstatusCode="404"redirect="FileNotFound.htm" /></customErrors>

将: mode="RemoteOnly"tomode="On"defaultRedirect="GenericErrorPage.htm" to defaultRedirect="ErrorPage.aspx"修改为:<customErrorsmode="On"defaultRedirect="ErrorPage.aspx"><errorstatusCode="403"redirect="NoAccess.htm" /><errorstatusCode="404"redirect="FileNotFound.htm" /></customErrors>

  这个配置文件将会将用户导向 名为ErrorPage.aspx 的页面.我们来创建这个错误页面,并显示一些信息给用户.

  右键网站 > Add New Item > 创建 ErrorPage.aspx ,然后显示一个信息在页面中,提示用户有个错误发生了.

  为了测试这个功能,我们回到 Default.aspx, 添加新的按钮并命名为 btnUnhandled 并将文本属性设置为 Throw Unhandled Exception.我们将使用"Divide By Zero"异常.并不去处理它.我们可以发现少了 catch 块.所以当错误发生时,用户就会按照我们在web.confg文件中设置的重定向到 "ErrorPage.aspx".

protected void btnHandled_Click(object sender, EventArgs e)
{
      int i = 9;
      int j = 0;
      Respone.Write( i / j );
}

运行这个程序点击 "Throw Unhandled Exception" 按钮.你会发现用户被自动地定向到了 Error 页面.并且错误也被记录在 Error 文件夹中.

艾伟:【翻译】使用ASP.NET 2.0记录错误相关推荐

  1. [翻译]在asp.net 2.0中使用WebParts

    原文地址:http://dotnetslackers.com/articles/aspnet/UsingWebPartsInASPNet20.aspx [译者改后代码下载] [翻译]在asp.net ...

  2. IIS6+asp.net 2.0+HTTP 错误 404 - 文件或目录未找到:您正在搜索的页面可能已经删除、更名或暂时不可用。...

    错误信息 您正在搜索的页面可能已经删除.更名或暂时不可用. HTTP 错误 404 - 文件或目录未找到. 解决方法 手动开始 ASP.NET 2.0 服务扩展: 转载于:https://www.cn ...

  3. [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField

    在ASP.NET 2.0中操作数据:在GridView控件中使用TemplateField 英文原版  |   本教程的代码(C#)   |   翻译目录   |   原文目录 导言 GridView ...

  4. [翻译]在Asp.net 2.0中操作数据::母板页和站点导航

    在Asp.net 2.0中操作数据::母板页和站点导航 英文原文 |  下载示例代码(C#)  |  翻译进度  |  英文教程目录 导言 通常,用户友好的个性化站点都有着一致的,站点统一的页面布局和 ...

  5. asp.net 2.0中一次性更新所有GRIDVIEW的记录

    在asp.net 2.0中,gridview控件是十分不错的控件.有的时候,可能一个GRIDVIEW控件中 的各行都是文本框,如何一次性更新所有修改过的记录呢?有两种方法,一种是使用sqldataso ...

  6. asp.net 2.0中用GRIDVIEW插入新记录

    出处:www.knowsky.com 作者:www.knowsky.com <script language=JavaScript src="/ad/ad.js">&l ...

  7. 上接[翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) - 基本应用

    当把数据库建完后(如果你使用的是App_Data文件夹内的ASPNETDB.MDF数据库,那么你就不需要做这件事了),你就可以在Web.config中添加<healthMonitoring> ...

  8. ASP.NET 4.0 的新特性(2 在WebForm中使用Routing)(翻译)

        接着上次的那个翻译,希望能对大家的学习有一点帮助! 原文:http://geekswithblogs.net/ranganh/archive/2009/08/20/whatrsquos-new ...

  9. [翻译]你或许还未听说过的一些ASP.NET 2.0要诀

    原文链接:http://weblogs.asp.net/dwahlin/archive/2007/04/17/simple-asp-net-2-0-tips-and-tricks-that-you-m ...

最新文章

  1. Android RelativeLayout属性
  2. Linux下二进制文件安装MySQL
  3. Nat. Mach. Intell. | 可解释性人工智能(xAI)遇上药物发现
  4. 50颗传感器、超1亿像素,算力700TOPS,这个自动驾驶平台有点儿炫!
  5. 【BZOJ-2427】软件安装 Tarjan + 树形01背包
  6. c语言编写程序数一下 1到100的所有整数中出现多少次数字9
  7. python数据分析第七章实训3_《利用Python进行数据分析·第2版》第7章 数据清洗和准备7.1 处理缺失数据7.2 数据转换7.3 字符串操作7.4 总结...
  8. 国内手机号正则表达式
  9. 设计模式--6大原则--迪米特法则
  10. Linux Page Cache参数调优在kafka中的应用
  11. javascript在asp.net中运用
  12. C++ string构造函数和析构函数
  13. 计算机word设置信纸,一分钟教你学会用Word做信纸和公章!
  14. win10不能安装破解软件:提示系统资源不足,无法完成请求服务的解决方法
  15. 例4-2 刽子手游戏(Hangman Judge,UVa 489)
  16. 大数据要学javaweb吗_大数据运维需要学Java吗?
  17. java教程——电商秒杀系统介绍
  18. 原生 js、javaScript 处理十位数(带有小数点的浮点数时间戳)、十三位数、时间戳, 将时间戳转换成 年、月、日、时、分、秒、毫秒、正常的日期格式
  19. 白色在html中怎么写,html如何设置文字颜色白色
  20. Hadoop的序列化和反序列化

热门文章

  1. iOS linker command failed with exit code 1 (use v to see invocation)
  2. getaddrinfo(localhost.localdomain): 未知的名称或服务
  3. centos7下的glusterfs的安装与使用
  4. 怎样保证客户端和服务器端数据的一致性(数据的同步)
  5. 炙手可热的前端资源大集合
  6. JDK和JRE的区别-zz
  7. [常见错误]Python.h: No such file or directory
  8. linux用户和组帐户管理
  9. DirectX 9高层着色语言介绍3——语言基础(2)
  10. Struts2三种传参方式(从jsp页面传到Action)