Classic ASP : Capture Errors

14,307

Solution 1

Yes, create an asp page which will log the error details to the database, and set this to be the 500 handler page in IIS as below.

Use the Server.GetLastError object to get the details of the error in your handler script.

It might be a good idea to log to a text file rather than a DB in your 500 handler for resiliency.

Set Custom 500 Handler in IIS

Solution 2

Complementing Jon's answer, use this script to write errors to a log file:

<%
'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

%>

Solution 3

Error handling in classic ASP is a complete pain. You can catch the error where you think it's going to occur using on error resume next, then check for the error code in the following line of code.

Alternately you can scan the server logs for 500 errors. or set up a "500 error" page in your IIS settings.

On Error Resume Next
... do something...
If Err.Number <> 0 Then
... handle error
end if
Share:
14,307
MindGame
Author by

MindGame

Updated on June 05, 2022

Comments

  • MindGame
    MindGame about 2 years

    Is it possible to capture all 500 errors in Classic ASP at a global level? Maybe something in IIS. I'm using II6 at the moment. I like to capture the error message and then store it in the database. I know its possible in ASPX pages, but don't know exactly how you do in classic asp.

    Thank you

  • MindGame
    MindGame over 12 years
    This is exactly what I was looking for. Thanks Jon. I will try it out right now.
  • MindGame
    MindGame over 12 years
    When I response.write Server.GetLastError() I don't get anything. Any ideas?
  • MindGame
    MindGame over 12 years
    Oh I was doing something dumb. I was not looking at the properties. ASPError.ASPCode() ASPError.ASPDescription() ASPError.Category() ASPError.Column() ASPError.Description() ASPError.File() ASPError.Line() ASPError.Number() ASPError.Source()
  • Shadow The Kid Wizard
    Shadow The Kid Wizard over 12 years
    Great answer indeed as @Dan also said - going to award nice fat bounty soon. :-)
  • Shawn J. Molloy
    Shawn J. Molloy almost 9 years
    I wish I could upvote this answer twice; such an elegantly sophisticated solution to a usually clunky and antiquated software development platform. It sure beats modifying tons of legacy code to include psuedo try to catch blocks...
  • Oliver
    Oliver almost 8 years
    For IIS7 you have to configure a new error redirection in "IIS->Error Pages" in your website settings. The url must be relative to root site not relative to your site (ex: "/YourSite/ErrorPages/500.asp") although you are configuring it in your website settings.
  • Jeff Huang
    Jeff Huang over 7 years
    I tried this injunction with @Saille's solution. However I wasn't able to produce the same result. Either at ASP -> Error Page or IIS -> Error Page
  • Stephen R
    Stephen R over 4 years
    ASP Classic <> ASP.NET
  • Stephen R
    Stephen R over 4 years
    If that doesn't work, set a custom error page for 500.100 errors. This is the actual error ASP Classic returns. (Also, if your site runs multiple languages you can have a different error page for ASP vs. whatever else. Handy if you want ASP to log errors! For example, 500.100 handled by error.asp, 500 handled by error.php.)