为经典 asp 站点启用日志记录

Enable logging for a classic asp site

我继承了一个经典的 ASP 项目,并将其部署在 IIS 7.5 上。 我可以访问该站点,但在某些时候我会收到一个通用的 500 错误页面。我想知道是怎么回事,所以我觉得最好是看日志

郑重声明,我是 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 错误:

  1. 转到“程序和功能”控制面板。
  2. Select "Turn Windows features on or off"
  3. 向下钻取到 Internet 信息服务 > 万维网服务 > 通用 HTTP 功能和 select "HTTP Errors"(当您在此处时,您可以通过向下钻取到 Internet 安装日志记录功能信息服务 > 万维网服务 > 健康与诊断和 selecting "HTTP Logging".)
  4. 点击确定进行安装。

安装后,配置 IIS 以显示详细的错误消息:

  1. 在您网站的 IIS 设置中,您现在应该会看到错误页面选项。双击它。
  2. 单击“编辑功能设置”。
  3. Select "Detailed errors" 或 "Detailed errors for local requests..." 取决于您是否在进行本地开发。
  4. 在站点的 IIS 设置中,双击 ASP 选项。
  5. 展开调试属性并将 "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 更完整,可以处理日志到数据库。