为经典 asp 站点启用日志记录
Enable logging for a classic asp site
我继承了一个经典的 ASP 项目,并将其部署在 IIS 7.5 上。
我可以访问该站点,但在某些时候我会收到一个通用的 500 错误页面。我想知道是怎么回事,所以我觉得最好是看日志
- 在 c:\WINDOWS\system32\LogFiles\ 和 c:\inetpub\logs\
中均未找到任何内容
- 尝试在此处启用日志记录:https://technet.microsoft.com/en-us/library/cc732826(v=ws.10).aspx但是我没有日志记录icon/button(见屏幕截图)。
- 尝试自定义错误 500 页面,如下所示:http://www.iis.net/configreference/system.webserver/httperrors/error 但没有 "Error Pages" 图标(见屏幕截图)
- 尝试使用 web.config 自定义 500 页,如下所示:http://blogs.iis.net/rickbarber/archive/2013/02/18/working-past-500-internal-server-error.aspx 但似乎它被忽略了
郑重声明,我是 IIS/ASP 的新手,所以这个问题听起来有点傻..
感谢您的任何建议!
这会将错误信息写入屏幕。如果要写入文件,请修改 "If blnLogFailure" 部分。
On Error Resume Next
Set objASPError = Server.GetLastError
blnLogFailure = TRUE
myMessage = "ERROR IN PROCESSING: " & objASPError.File & vbCrLf
myMessage = myMessage & "ASP Code: " & objASPError.ASPCode & vbCrLf
myMessage = myMessage & "Number: " & objASPError.Number & vbCrLf
myMessage = myMessage & "Source: " & objASPError.Source & vbCrLf
myMessage = myMessage & "Line Number: " & objASPError.Line & vbCrLf
myMessage = myMessage & "Description: " & objASPError.Description & vbCrLf
myMessage = myMessage & "ASP Description: " & objASPError.ASPDescription & vbCrLf
for each item in Request.ServerVariables
myMessage = myMessage & "ITEM: " & item & " VALUE: " & Request.ServerVariables(item) & vbCrLf
next
If blnLogFailure Then
Response.Write myMessage
End If
您应该在 IIS 中安装 HTTP 错误功能。这足以查看错误消息——您不需要记录。
安装 HTTP 错误:
- 转到“程序和功能”控制面板。
- Select "Turn Windows features on or off"
- 向下钻取到 Internet 信息服务 > 万维网服务 > 通用 HTTP 功能和 select "HTTP Errors"(当您在此处时,您可以通过向下钻取到 Internet 安装日志记录功能信息服务 > 万维网服务 > 健康与诊断和 selecting "HTTP Logging".)
- 点击确定进行安装。
安装后,配置 IIS 以显示详细的错误消息:
- 在您网站的 IIS 设置中,您现在应该会看到错误页面选项。双击它。
- 单击“编辑功能设置”。
- Select "Detailed errors" 或 "Detailed errors for local requests..." 取决于您是否在进行本地开发。
- 在站点的 IIS 设置中,双击 ASP 选项。
- 展开调试属性并将 "Send Errors To Browser" 设置为 true。
您现在应该会看到详细的错误消息。
IIS 日志对您没有帮助,因为它们不包含详细的错误消息。
关于实际记录 Asp 错误,如问题标题所问,应添加自定义错误页面。
这需要“HTTP 错误”,因此如果尚未安装,请先安装。参见 Keith answer。
然后,添加一个 .asp
错误页面。此页面必须尽可能健壮,具有最小的依赖性。如果它也失败了,您将没有任何日志。
这个页面首先可以做这样的事情:
Dim error
Set error = Server.GetLastError
LogErrorToFile
Sub LogErrorToFile()
Dim logFso
Dim log
On Error Resume Next
Set logFso = Server.CreateObject("Scripting.FileSystemObject")
If error.Number <> 0 Then
Exit Sub
End If
Set log = logFso.OpenTextFile("YourLogPath.txt", 8, True)
If error.Number <> 0 Then
Exit Sub
End If
log.WriteLine "URL: " & Request.ServerVariables("URL")
log.WriteLine "File: " & error.File
log.WriteLine "Line, col: " & error.Line & ", " & error.Column
log.WriteLine "Description" & error.Description & vbCrLf
log.Close
End Sub
然后在此页面中添加您想要的任何内容。
GetLastError
返回的 object 记录在案 here。
接下来,要求您的站点在出现 Asp 错误时使用此错误页面。为此,将 500,100 错误页面设置为您的错误页面。在 web.config 中,假设您的错误文件名为 err500.asp
并且位于您站点的根目录下,这可以通过以下方式完成:
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="500" subStatusCode="100" />
<!-- subStatusCode="100" are ASP errors -->
<error statusCode="500" subStatusCode="100" path="/err500.asp" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
此答案是此 blog post 的简化。此博客上的示例代码 post 更完整,可以处理日志到数据库。
我继承了一个经典的 ASP 项目,并将其部署在 IIS 7.5 上。 我可以访问该站点,但在某些时候我会收到一个通用的 500 错误页面。我想知道是怎么回事,所以我觉得最好是看日志
- 在 c:\WINDOWS\system32\LogFiles\ 和 c:\inetpub\logs\ 中均未找到任何内容
- 尝试在此处启用日志记录:https://technet.microsoft.com/en-us/library/cc732826(v=ws.10).aspx但是我没有日志记录icon/button(见屏幕截图)。
- 尝试自定义错误 500 页面,如下所示:http://www.iis.net/configreference/system.webserver/httperrors/error 但没有 "Error Pages" 图标(见屏幕截图)
- 尝试使用 web.config 自定义 500 页,如下所示:http://blogs.iis.net/rickbarber/archive/2013/02/18/working-past-500-internal-server-error.aspx 但似乎它被忽略了
郑重声明,我是 IIS/ASP 的新手,所以这个问题听起来有点傻.. 感谢您的任何建议!
这会将错误信息写入屏幕。如果要写入文件,请修改 "If blnLogFailure" 部分。
On Error Resume Next
Set objASPError = Server.GetLastError
blnLogFailure = TRUE
myMessage = "ERROR IN PROCESSING: " & objASPError.File & vbCrLf
myMessage = myMessage & "ASP Code: " & objASPError.ASPCode & vbCrLf
myMessage = myMessage & "Number: " & objASPError.Number & vbCrLf
myMessage = myMessage & "Source: " & objASPError.Source & vbCrLf
myMessage = myMessage & "Line Number: " & objASPError.Line & vbCrLf
myMessage = myMessage & "Description: " & objASPError.Description & vbCrLf
myMessage = myMessage & "ASP Description: " & objASPError.ASPDescription & vbCrLf
for each item in Request.ServerVariables
myMessage = myMessage & "ITEM: " & item & " VALUE: " & Request.ServerVariables(item) & vbCrLf
next
If blnLogFailure Then
Response.Write myMessage
End If
您应该在 IIS 中安装 HTTP 错误功能。这足以查看错误消息——您不需要记录。
安装 HTTP 错误:
- 转到“程序和功能”控制面板。
- Select "Turn Windows features on or off"
- 向下钻取到 Internet 信息服务 > 万维网服务 > 通用 HTTP 功能和 select "HTTP Errors"(当您在此处时,您可以通过向下钻取到 Internet 安装日志记录功能信息服务 > 万维网服务 > 健康与诊断和 selecting "HTTP Logging".)
- 点击确定进行安装。
安装后,配置 IIS 以显示详细的错误消息:
- 在您网站的 IIS 设置中,您现在应该会看到错误页面选项。双击它。
- 单击“编辑功能设置”。
- Select "Detailed errors" 或 "Detailed errors for local requests..." 取决于您是否在进行本地开发。
- 在站点的 IIS 设置中,双击 ASP 选项。
- 展开调试属性并将 "Send Errors To Browser" 设置为 true。
您现在应该会看到详细的错误消息。
IIS 日志对您没有帮助,因为它们不包含详细的错误消息。
关于实际记录 Asp 错误,如问题标题所问,应添加自定义错误页面。
这需要“HTTP 错误”,因此如果尚未安装,请先安装。参见 Keith answer。
然后,添加一个 .asp
错误页面。此页面必须尽可能健壮,具有最小的依赖性。如果它也失败了,您将没有任何日志。
这个页面首先可以做这样的事情:
Dim error
Set error = Server.GetLastError
LogErrorToFile
Sub LogErrorToFile()
Dim logFso
Dim log
On Error Resume Next
Set logFso = Server.CreateObject("Scripting.FileSystemObject")
If error.Number <> 0 Then
Exit Sub
End If
Set log = logFso.OpenTextFile("YourLogPath.txt", 8, True)
If error.Number <> 0 Then
Exit Sub
End If
log.WriteLine "URL: " & Request.ServerVariables("URL")
log.WriteLine "File: " & error.File
log.WriteLine "Line, col: " & error.Line & ", " & error.Column
log.WriteLine "Description" & error.Description & vbCrLf
log.Close
End Sub
然后在此页面中添加您想要的任何内容。
GetLastError
返回的 object 记录在案 here。
接下来,要求您的站点在出现 Asp 错误时使用此错误页面。为此,将 500,100 错误页面设置为您的错误页面。在 web.config 中,假设您的错误文件名为 err500.asp
并且位于您站点的根目录下,这可以通过以下方式完成:
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="500" subStatusCode="100" />
<!-- subStatusCode="100" are ASP errors -->
<error statusCode="500" subStatusCode="100" path="/err500.asp" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
此答案是此 blog post 的简化。此博客上的示例代码 post 更完整,可以处理日志到数据库。