设计网站的时候不可能我们的网站不出现一点错误常见的页面不存在页面运行出错等错误信息一般网站多少总是存在的关键是这些错误出现以后管理员怎样方便及时的发现它们尽量减少用户对网站的不好印象不管是IIS 还是IIS 我们都可以设置网站的自定义错误信息通过这样的设置一些系统默认的比较不友好的错误信息就可以更换为网站管理员自定义的页面这对于网站的实用和友好性都大有帮助但是我们在使用过程中却发现一个比较不方便的问题当我们查看网站日志的时候我们发现了这些错误页面的出现但是却不能在系统事件查看这些错误信息而在网站的日志部分查看这些错误信息又比较麻烦有没有办法可以直接将产生的错误信息象安全日志一样保存在系统日志部分呢?ASPNET现在就可以做到现在我们一步步学习怎样实现这个功能
一建立EventLog虚拟目录
实现我们在我们的网站建立一个名为EventLog的虚拟目录具体建立方法如下在Win中打开开始->程序->管理工具->Internet信息服务找到建立的网站邮件点击选择新建在弹出的菜单选择虚拟目录然后按照向导设置即可
二修改WEBCONFIG文件
我们知道在WEBCONFIG文件中我们可以象IIS的自定义错误信息页面一样设置错误信息页面的位置和错误信息是否显示等为了实现本文提到的功能我们需要适当修改WEBCONFIG文件打开customErrors mode为ON目的是非地计算机用户只能得到友好(自定义)的错误信息具体设置如下
<configuration>
<systemweb>
<customErrors mode=On defaultRedirect=/eventlog/customerrorpageaspx>
<error statusCode= redirect=/eventlog/Pageaspx/>
<error statusCode= redirect=/eventlog/pageaspx/>
</customErrors>
</systemweb>
</configuration>
在以上的设置中我们看到当和错误产生的时候会将页面转到刚才我们设置EventLog虚拟目录的相应页面
三建立其他文件
为了试验我们的设置是否成功首先我们必须设立一个可以产生错误的页面Defaultaspx这个页面的代码如下
Defaultaspx 页面代码
<% @Language=VB %>
<script language=VB runat=server>
Sub Page_Load(Sender As Object E As EventArgs)
If IsPostBack Then
定义变量
dim x as integer
dim y as integer
dim z as integer
x =
y =
产生错误
z = x/y
End Sub
</script>
<html>
<head>
</head>
<body>
<form method=post action=eventlogaspx name=form id=number>
<asp:Button id=abutton type=submit text=点击产生错误 runat=server />
</form>
</body>
</html>
以上代码我们设计了一个除零的错误页面显然按钮提交时这个页面肯定出错我们需要查看是否错误会加入系统日志现在我们来看错误页面的代码这里我们可能用到三个错误页面customerrorpageaspxPageaspxPageaspx这些页面都放在虚拟目录 EventLog下
它们的代码分别如下
Customerrorpageaspx 代码
<html>
<head></head>
<body>
<h>custom error page</h>
</body>
</html>
pageaspx(页面没找到错误) 代码
<html>
<head></head>
<body>
<h> error page</h>
</body>
</html>
pageaspx(权限错误)代码
<html>
<head></head>
body>
<h> error page</h>
</body>
</html>
设置以上页面以后最重要的我们需要设置全局配置文件globalasax这样错误信息才可以保存到系统日志我们来看这个文件怎样设置
<%@ Import Namespace=System %>
<%@ Import Namespace=SystemDiagnostics %>
<script language=VB runat=server>
Public Sub Application_OnError(Sender as Object E as EventArgs)
捕捉错误
dim LastError as Exception = ServerGetLastError()
Dim ErrMessage as String = LastErrortoString()
这里设置日志的名字为MyLog
Dim LogName As String = MyLog
Dim Message As String = Url & RequestPath & Error: & ErrMessage
如果日志不存在建立一个
If (Not EventLogSourceExists(LogName)) Then
EventLogCreateEventSource(LogName LogName)
End if
Dim Log as New EventLog
LogSource = LogName
以下列出了五中错误
LogWriteEntry(Message EventLogEntryTypeInformation )
LogWriteEntry(Message EventLogEntryTypeError )
LogWriteEntry(Message EventLogEntryTypeWarning )
LogWriteEntry(Message EventLogEntryTypeSuccessAudit )
LogWriteEntry(Message EventLogEntryTypeFailureAudit )
End Sub
</script>
在以上设置中定义了当错误发生的时候WEB服务器将首先检查是否存在名为MyLog的日志如果不存在建立一个然后将错误信息写入日志并保存在以上的设置中我们注意以下几点()以上代码中我们将日志命名为MyLog在实际应用中我们可以根据自己的要求设置日志名字比如 ××的网站日志等这样不但容易辨别而且也不会被其他管理员认错为别的内容()以上我们给出的错误页面很简单就是一个简单语句在实际网站应用中我们可以有几个选择首先我们可以将所有这些错误页面设置为网站的首页当页面出错或者页面不存在的时候直接将用户引导到网站首页这样不显示错误信息对用户而言可能浏览感觉较好另外也可以设置将错误页面设置比较友好最好是一般用户都可以理解方式而不是简单的英文提示
四查看效果
现在我们打开事件查看来验证是否将事件写入日志打开程序->管理->事件查看器选择MyLog我们可以看到以下的界面(图一)
在上图中我们看到了MyLog里面有几个事件打开查看我们可以看到错误信息确实意见记录下来(图二)
五总结
以上我们用完整的举例详细介绍了错误信息写入系统日志的实现方法这样实现以后相信对系统管理和网站管理都可以起到很好的帮助作用同时在实用ASPNET的过程中我们不得不一次次惊歎它功能的完善ASPNET不但的页面设计数据库访问缓存等方面功能和性能大大提高而且在与系统的结合整个环境的管理等方面也进一步完善所以对于习惯ASP或者PHP等其他语言编程的用户在使用ASPNET以后不能只仅仅关注页面实现和数据处理等常规操作而应该进一步在网站安全系统管理等方面学习ASPNET真正在网络开发方面达到一个更高的境界