让用户做测试员 利用IIS自定义错误页

一些小网站、B/S系统,测试的覆盖面往往并不是很到位,于是,用户往往成为bug的重要反馈者。
一般的做法,是当系统出现错误时,让用户截图发过来。但这样其实会漏掉大多数的错误情况。其实这一步,完全不需要用户动手,可以在出现错误时利用IIS的自定义错误页,将错误记录到自己的错误日志文件中,就可以给我们提供很丰富的bug数据。

IIS的自定义错误页类型详解参见:http://blog.csdn.net/zouqingfang/article/details/7185659

一般ASP出错时,是500-100错误。所以只要替换这一个文件即可。

这个文件可以在windows目录中找到:
C:/WINNT/Help/iisHelp/common/500-100.asp

将它拷贝到网站根目录,并修改IIS中该网站的配置,设置“自定义错误页面”,将500;100的类型设为URL,同时URL设为 /500-100.asp,这样每次出错IIS就不会调用他默认的处理代码了,而是调用我们刚拷贝过去这个文件。

现在打开500-100.asp,可以看到他怎么获得错误的具体信息,做一些修改,将这些错误信息不要使用Response.Write输出,而使其生成字符串并最终写到一个html文件里,就可以获得每一次用户浏览时ASP出错后,用户看到的信息了。

如果你的网站使用的是utf-8编码的话,这里可能会遇到一些编码上的麻烦,记住IIS执行这个文件并不是include进来,而是作为一个独立文件执行的,所以这个文件头可以加上 <%@codepage=65001%> 以确保是utf-8格式。

然后每当发现错误日志,便逐一处理其中的错误,然后把错误日志删掉,beta流程就很完美了~

附上我修改后使用的500-100.asp

<%@LANGUAGE="VBscript" CODEPAGE="65001"%>
<!--#include file="myHeaders.asp"-->
<%
  '上面的头文件是我网站内的各种工具,这里主要用到最后的写日志文件工具。

  Const lngMaxFormBytes = 200

  Dim objASPError, blnErrorWritten, strServername, strServerIP, strRemoteIP
  Dim strMethod, lngPos, datNow, strQueryString, strURL

  '这里就不清除界面了,要不然会把已经输出的部分都清掉只显示错误页面。
  If false and Response.Buffer Then
    Response.Clear
    Response.Status = "500 Internal Server Error"
    Response.ContentType = "text/html"
  End If

  Response.Expires = 0
  Set objASPError = Server.GetLastError

  ErrorContent = "<div style='margin:20px;padding:20px;border:1px solid red;'>"
      ErrorContent = ErrorContent & " 错误类型: "
      ErrorContent = ErrorContent &  Server.HTMLEncode(objASPError.Category)
      If objASPError.ASPCode > "" Then ErrorContent = ErrorContent &  Server.HTMLEncode(", " & objASPError.ASPCode)
        ErrorContent = ErrorContent &  Server.HTMLEncode(" (0x" & Hex(objASPError.Number) & ")" ) & "<br>"
      If objASPError.ASPDescription > "" Then 
        ErrorContent = ErrorContent &  Server.HTMLEncode(objASPError.ASPDescription) & "<br>"
      elseIf (objASPError.Description > "") Then 
        ErrorContent = ErrorContent &  Server.HTMLEncode(objASPError.Description) & "<br>" 
      end if
      blnErrorWritten = False
      ' Only show the Source if it is available and the request is from the same machine as IIS
      If objASPError.Source > "" Then
        strServername = LCase(Request.ServerVariables("SERVER_NAME"))
        strServerIP = Request.ServerVariables("LOCAL_ADDR")
        strRemoteIP =  Request.ServerVariables("REMOTE_ADDR")
        If (strServerIP = strRemoteIP) And objASPError.File <> "?" Then
          ErrorContent = ErrorContent &  Server.HTMLEncode(objASPError.File)
          If objASPError.Line > 0 Then ErrorContent = ErrorContent &  ", line " & objASPError.Line
          If objASPError.Column > 0 Then ErrorContent = ErrorContent &  ", column " & objASPError.Column
          ErrorContent = ErrorContent &  "<br>"
          ErrorContent = ErrorContent &  "<font style=""COLOR:000000; FONT: 8pt/11pt courier new""><b>"
          ErrorContent = ErrorContent &  Server.HTMLEncode(objASPError.Source) & "<br>"
          If objASPError.Column > 0 Then ErrorContent = ErrorContent &  String((objASPError.Column - 1), "-") & "^<br>"
          ErrorContent = ErrorContent &  "</b></font>"
          blnErrorWritten = True
        End If
      End If
      If Not blnErrorWritten And objASPError.File <> "?" Then
        ErrorContent = ErrorContent &  "<b>" & Server.HTMLEncode(  objASPError.File)
        If objASPError.Line > 0 Then ErrorContent = ErrorContent &  Server.HTMLEncode(", line " & objASPError.Line)
        If objASPError.Column > 0 Then ErrorContent = ErrorContent &  ", column " & objASPError.Column
        ErrorContent = ErrorContent &  "</b><br>"
      End If
      ErrorContent = ErrorContent & "<br>页面: "
      strMethod = Request.ServerVariables("REQUEST_METHOD")
      ErrorContent = ErrorContent &  strMethod & " "
      If strMethod = "POST" Then
        ErrorContent = ErrorContent &  Request.TotalBytes & " bytes to "
      End If
      ErrorContent = ErrorContent &  Request.ServerVariables("SCRIPT_NAME")
      ErrorContent = ErrorContent &  "</li>"
      If strMethod = "POST" Then
        ErrorContent = ErrorContent &  "<p><li>POST Data:<br>"
        ' On Error in case Request.BinaryRead was executed in the page that triggered the error.
        On Error Resume Next
        If Request.TotalBytes > lngMaxFormBytes Then
          ErrorContent = ErrorContent &  Server.HTMLEncode(Left(Request.Form, lngMaxFormBytes)) & " . . ."
        Else
          ErrorContent = ErrorContent &  Server.HTMLEncode(Request.Form)
        End If
        On Error Goto 0
        ErrorContent = ErrorContent &  "</li>"
      End If
      ErrorContent = ErrorContent & "<br>时间: "
      datNow = Now()
      ErrorContent = ErrorContent &  Server.HTMLEncode(FormatDateTime(datNow, 1) & ", " & FormatDateTime(datNow, 3))
      ErrorContent = ErrorContent & "</div>"
    %>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%=ErrorContent%>

<%
    gLog.Log "AspError", ErrorContent '这个写日志工具是我另外做的,作用就是写某一类型(例如这里的ASPError)的日志,同时记录环境变量,最终记录日志主题内容。这个日志文件用html保存比较好看。
%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值