2012-02-13 55 views
6

¿Es posible capturar los 500 errores en ASP clásico a nivel global? Tal vez algo en IIS. Estoy usando II6 en este momento. Me gusta capturar el mensaje de error y luego almacenarlo en la base de datos. Sé que es posible en páginas ASPX, pero no sé exactamente cómo te va en ASP clásico.ASP clásico: errores de captura

Gracias

+0

IIS7 ha fallado el seguimiento de solicitudes que informa de errores de ASP clásicos no controlados, no estoy seguro de si existe en 6.0. http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis/ –

Respuesta

13

Sí, crear una página ASP que ingrese los detalles del error a la base de datos, y establecer que se trata de la página 500 controlador en IIS como a continuación.

Utilice el objeto Server.GetLastError para obtener los detalles del error en el script del controlador.

Puede ser una buena idea iniciar sesión en un archivo de texto en lugar de un DB en su controlador 500 para mayor flexibilidad.

Set Custom 500 Handler in IIS

+1

Gran respuesta ... – Dan

+0

Esto es exactamente lo que estaba buscando. Gracias Jon. Voy a probarlo ahora mismo. – MindGame

+0

Cuando response.write Server.GetLastError() no obtengo nada. ¿Algunas ideas? – MindGame

4

manejo en ASP clásico error es un dolor completa. Puede detectar el error donde cree que va a ocurrir usando on error resume next, luego verifique el código de error en la siguiente línea de código.

De forma alternativa, puede escanear los registros del servidor en busca de 500 errores. o configure una página de "500 errores" en su configuración de IIS.

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

Como complemento de la respuesta de Jon, utilizar este script para escribir los errores a un archivo de registro:

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

%> 
0

Para añadir a la respuesta de @ Jon Eastwood - si está utilizando IIS 7.5, entonces en vez de "errores personalizados "va a buscar" Páginas de error .NET" por la imagen de abajo:

enter image description here

Esto se aplica a Windows Server 2008 y otros nuevos SKUs de Windows.