Asp classic 经典ASP:捕获错误

Asp classic 经典ASP:捕获错误,asp-classic,custom-error-pages,Asp Classic,Custom Error Pages,是否有可能在全球范围内捕获经典ASP中的所有500个错误?也许是IIS里的东西。我现在用的是II6。我喜欢捕获错误消息,然后将其存储在数据库中。我知道这在ASPX页面中是可能的,但不知道在经典asp中是如何做到的 谢谢是的,创建一个asp页面,将错误详细信息记录到数据库中,并将其设置为IIS中的500处理程序页面,如下所示 使用Server.GetLastError对象在处理程序脚本中获取错误的详细信息 在500处理程序中,最好登录到文本文件,而不是DB,以实现弹性 经典ASP中的错误处理是一件

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


谢谢

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

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

在500处理程序中,最好登录到文本文件,而不是DB,以实现弹性


经典ASP中的错误处理是一件非常痛苦的事情。您可以使用下一步错误恢复时的
捕获您认为会发生的错误,然后在下面的代码行中检查错误代码

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

On Error Resume Next
... do something...
If Err.Number <> 0 Then
... handle error
end if
出错时继续下一步
... 做点什么。。。
如果错误号为0,则
... 处理错误
如果结束

为了补充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

%>

添加到@Jon Eastwood的答案中-如果您使用的是IIS 7.5,那么您将根据下图查找“.NET错误页”,而不是“自定义错误”:


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

IIS7的请求跟踪失败,报告未处理的经典ASP错误,不确定6.0中是否存在该错误。这正是我想要的。谢谢你,乔恩。我现在就试试。当我response.write Server.GetLastError()时,我什么都没有得到。有什么想法吗?哦,我在做些蠢事。我没有看房子。ASPError.ASPCode()ASPError.ASPDescription()ASPError.Category()ASPError.Column()ASPError.Description()ASPError.File()ASPError.Line()ASPError.Number()ASPError.Source()正如@Dan所说的,答案非常好-很快就会颁发丰厚奖金。:-)如果不起作用,请为
500.100
错误设置自定义错误页面。这是ASP Classic返回的实际错误。(另外,如果您的站点运行多种语言,您可以为ASP设置不同的错误页面,而不是其他任何错误页面。如果您希望ASP记录错误,请使用此页面!例如,
500.100
error.ASP
处理,
500
error.php
处理ASP.NET