第7章 异常处理和日志追踪

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章异常处理和日志追踪本章将讨论如何处理ASP.NET应用程序中的异常、如何追踪错误以及解决一些故障问题。将会讨论结构化异常处理,日志记录以及当出现错误时,如何将用户页面重定向到一个用户友好的提示页面,本章也将介绍如何使用页面追踪和查看ASP.NET页面的诊断信息。本章内容有:•应用程序异常处理类•如何记录异常•错误页面的使用•页面的追踪7.1ASP.NET应用程序异常处理错误的产生很多时候是开发人员始料未及的,有的错误可能运行了很久才突然被触发。然而也有一些错误是由于开发人员的疏漏所造成的,一个简单的例子是被0除。由于.NET会先检测本地的错误处理器,因此开发人员可以设计良好的错误处理方式,比如显示一个友好的信息,或者是不显示错误信息而将这些错误记录到事件日志中,本节将介绍如何使用异常处理机制来处理ASP.NET应用程序中的错误。7.1.1异常处理基础大多数.NET语言都支持结构化异常处理,当一个错误引发时,.NET框架其实创建了一个异常对象用于呈现问题。开发人员可以使用异常处理器来捕捉这个异常对象。假如不使用异常处理器的话,用户代码将会被中止,ASP.NET将显示一个让用户迷惑的错误处理页面。7.1.2Exception类上一节的示例中,当产生了被零除的错误后,.NET会创建一个名为DivideByZeroException的异常对象,catch块中将捕获这个异常对象,并执行处理异常的代码块。DivideByZeroException是一个派生自Exception的对象。7.1.3捕捉异常通常使用try/catch语句块来捕捉异常,如7.1.1节中的例子所示。当使用catch语句捕捉到一个异常时,都是一个具体类型的异常而不是一个Exception这样的异常基类,具体异常用于描述一个指定类型的错误,例如上一节中的DivideByZeroException异常。7.1.4异常的嵌套假定在try块中调用一个来自外部的方法,比如定义了一个用于除法运算的函数,在该函数内部捕捉了DivideByZeroException的异常。然后在另外一个try块中调用这个除法运算的函数,这种方法称为嵌套异常。7.1.5自定义异常如果系统提供的异常类已经不能够满足应用系统开发的需要,或者开发团队需要一套自定义异常处理机制,可以创建自定义的异常类。7.1.6finally语句块不论是否捕捉到异常,finally块中的代码一定会执行。举个例子,在处理文件时,如果打开了一个文件,执行一些写入操作,这时发生了致命错误,由于catch块捕捉到异常后,控制权会直接跳转到异常处理结尾,那么,这时这个打开的文件便一直没有被关闭。显然这会造成资源占用,如果文件是以独占的方式被打开的话,其他操作将无法顺利进行。7.2记录异常Web应用程序的用户可能成千上万,有些时候除了向用户显示错误信息之外可能还需要将异常记录下来,比如Web服务器负载过重,一些问题间歇性的多次出现等等。.NET框架提供了多种日记志工具,比如可以在错误产生时发送E-Mail,添加到数据库记录或者是读写文件。一个较好的处理方式是使用Windows事件,Windows事件程序是Windows内置的用于记录系统或者是应用程序日志的一个工具。这个工具可以被任何应用程序使用。7.2.1查看Windows事件日志启动Windows事件查看器,单击“开始|设置|控制面板|管理工具”菜单,选择事件查看器,将弹出事件查看器窗口。7.2.2写入事件日志System.Diagnostics命名空间下提供了可以读写事件日志的类,开发人员可以使用这个命名空间中的类将ASP.NET异常信息写入事件日志中。7.2.3自定义日志自定义的日志是指属于自己的分类的日志,比如可以创建一个属于本程序特有的错误分类。7.2.4编程查看事件日志可以使用ASP.NET将事件日志呈现在Web页上,这样系统维护人员不用必须跑到Web服务上去检查应用程序产生的日志。7.3错误页面错误页面用于描述当前页面中未被处理的错误,当在进行ASP.NET项目开发时,开发人员将面对大量的错误页面来进行调试和处理。错误页面对于在开发过程中诊断错误是非常有用的,因为其中包含了大量关于产生错误的信息。7.3.1错误模式笔者在本地机器上产生错误的错误页面,对远程用户来说,则有不同。出于安全性考虑,通常不希望在远端的用户看到错误页面源代码列表等。ASP.NET中,可以在web.config配置文件中的customErrors配置节中配置错误页面的显示方式。7.3.2自定义错误页面在7.3.1节中列出的由VS2010生成的customErrors节的代码中,还具有两个非常有用的error子节点。该节点指定当发生指定的错误时,将页面重定向到一个定义好的错误页面。比如当发生403错误时,将页面重定向到NoAccess.htm页面。7.4页面追踪尽管ASP.NET的错误页面提供了非常有用的信息,但是有时候开发人员需要更详细的信息来修正应用程序中的错误。比如应用程序执行一个属性或者是追踪应用程序中的逻辑错误。有时候应用程序可能生成了一些无效的数据,但是并没有明显的异常触发。ASP.NET提供了追踪功能,让开发人员使用一种更方便和有弹性的方式来报告诊断信息。7.4.1启用页面追踪为了使用追踪功能,开发人员需要显示的允许页面追踪,有几种方法可以启用追踪功能,最常用的方法是在ASP.NET的页面声明区添加一个Trace=“true”的属性。7.4.2页面追踪信息ASP.NET的追踪提供了大量的诊断信息,下面依次进行详细的理解:1.请求详细信息2.跟踪信息3.控件树4.会话状态和应用程序状态5.请求Cookie集合和响应Cookie集合6.标头集合7.窗体集合8.Querystring集合9.服务器变量7.4.3写入页面追踪信息默认的追踪日志提供了大量重要的信息允许开发人员监视应用程序,有时可能想写入自定义的追踪消息。有时开发人员可能想在程序的不同执行点记录变量的多个值,或者是代码到达某个执行点时输出一些消息以便于检查执行过程。通常开发人员使用VS的调试器来完成类似的功能,但是使用追踪也可以完成类似的功能,特别是对于一些由于Web应用程序己经部署的场合,使用追踪是非常有意义的。7.4.4应用程序页面追踪信息使用应用程序级追踪,可以让开发人员追踪整个应用程序,但是追踪信息并不显示在页面,而是被收集和保存在内存中一小段时间。可以通过请求一个特定的URL来查看最近的追踪信息。使用应用程序级追踪有几个好处,首先追踪信息将不会被格式化或者是布局Web页面而搅乱,其次是比较来自不同请求的追踪信息。7.5小结本章介绍了在ASP.NET中如何进行异常处理和日志追踪。首先讨论了异常处理的基础,详细介绍了Exception类,如何在ASP.NET应用程序中捕捉未处理的异常,如何进行异常的嵌套,以及如何自定义异常。接下来讨论了如何在应用程序日志中记录异常,讨论了Windows事件日志查看器的使用,如何向事件日志中写入日志项,如何自定义事件日志,并讨论了以编程的方式查看事件日志。本章也讨论了当应用程序出现错误时,如何为将错误重定向到一个用户友好的错误页面。本章最后介绍了页面追踪技术,可以使用页面级的追踪和应用程序级的追踪。7.6常见面试题分析7.6.1如何针对不同的异常进行捕捉C#中一个try块可以有多个catch块,每个catch块可以针对特别的异常进行特别的处理。但是安全起见,最后应该添加对Exception类型的异常进行捕捉的catch块,以保证没有异常被毫无处理地抛出。7.6.2Finally语句有什么作用?使用finally块可以清除try中分配的任何资源,以及运行任何即使在发生异常时也必须执行的代码。代码控制权最终总是传递给finally块,与try块的退出方式无关。因此,finally块提供了一种保证资源清理或者资源恢复的机制。

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功