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