经典ASP:捕获错误

时间:2012-02-13 16:25:39

标签: asp-classic custom-error-pages

是否有可能在全球范围内捕获Classic ASP中的所有500个错误?也许是IIS中的东西。我现在正在使用II6。我喜欢捕获错误消息,然后将其存储在数据库中。我知道它在ASPX页面中是可能的,但是不知道你在经典的asp中是怎么做的。

谢谢

4 个答案:

答案 0 :(得分:14)

是的,创建一个asp页面,将错误详细信息记录到数据库中,并将其设置为IIS中的500处理程序页面,如下所示。

使用Server.GetLastError对象获取处理程序脚本中错误的详细信息。

在500处理程序中登录文本文件而不是数据库以获得弹性可能是个好主意。

Set Custom 500 Handler in IIS

答案 1 :(得分:6)

补充Jon的答案,使用此脚本将错误写入日志文件:

<%
'Set this page up in IIS to receive HTTP 500 errors
''Type' needs to be 'URL' and the URL is e.g.: '/500Error.asp' if this file is named '500Error.asp' and is in the site root directory.
'This script assumes there is a "/Log" folder, and that IIS has write access to it.
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0

Dim objFSO, err
Set objFSO=CreateObject("Scripting.FileSystemObject")

Set err = Server.GetLastError()

outFile=Server.MapPath("/Log/ErrorLog.txt")
Set objFile = objFSO.OpenTextFile(outFile, ForAppending, True, TristateTrue)

objFile.WriteLine Now & " - ERROR - ASPCode:" & err.ASPCode & " ASPDescription: " & err.ASPDescription & " Category: " & err.Category & " Description: " & err.Description & " File: " & err.File & " Line: " & err.Line & " Source: " & err.Source  & vbCrLf
objFile.Close

Set objFile = Nothing
Set err = Nothing

%>

答案 2 :(得分:4)

经典ASP中的错误处理是一个彻头彻尾的痛苦。您可以使用on error resume next捕获您认为将发生的错误,然后在以下代码行中检查错误代码。

或者,您可以扫描服务器日志以查找500个错误。或者在IIS设置中设置“500错误”页面。

On Error Resume Next
... do something...
If Err.Number <> 0 Then
... handle error
end if

答案 3 :(得分:0)

要添加到@Jon Eastwood的答案 - 如果您使用的是IIS 7.5,那么而不是&#34;自定义错误&#34;你会寻找&#34; .NET错误页面&#34;根据下图:

enter image description here

这适用于Windows Server 2008和其他较新的Windows SKU。