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

时间:2015-03-12 16:03:47

标签: iis error-handling asp-classic

我继承了一个经典的ASP项目,并将其部署在IIS 7.5上。 我能够访问该网站,但在某些时候我得到一个通用的500错误页面。我想知道发生了什么,所以我认为最好是看日志

enter image description here

为了记录,我是IIS / ASP的新手,所以这个问题听起来有点傻。 谢谢你的任何建议!

3 个答案:

答案 0 :(得分:8)

您应在IIS中安装HTTP错误功能。这足以查看错误消息 - 您不会需要记录。

安装HTTP错误:

  1. 转到“程序和功能”控制面板。
  2. 选择"打开或关闭Windows功能"
  3. 深入了解Internet信息服务> Word Wide Web Services>常见的HTTP功能和选择" HTTP错误" (当您正在使用它时,您可以通过向下钻取到Internet信息服务> Word Wide Web服务>运行状况和诊断并选择" HTTP日志记录"来安装日志记录功能。)
  4. 单击“确定”进行安装。
  5. 安装完成后,配置IIS以显示详细的错误消息:

    1. 在您网站的IIS设置中,您现在应该会看到错误页面选项。双击它。
    2. 点击修改功能设置。
    3. 选择"详细错误"或"本地请求的详细错误......"取决于你是否在进行本地开发。
    4. 在您网站的IIS设置中,双击ASP选项。
    5. 展开调试属性并设置"将错误发送到浏览器"真实。
    6. 您现在应该会看到详细的错误消息。

      IIS日志不会帮助您,因为它们不包含详细的错误消息。

答案 1 :(得分:1)

这会将错误信息写入屏幕。修改"如果是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

答案 2 :(得分:0)

关于实际上记录Asp错误的位置,就像问题标题似乎要问的那样,应该添加一个自定义错误页面。

这需要“ HTTP错误”,因此如果尚未安装,请先安装。参见Keith answer

然后,添加一个.asp错误页面。该页面必须尽可能健壮,并且依赖性最小。如果它也失败,那么您将没有任何日志。 该页面首先可以执行以下操作:

Dim err
Set err = Server.GetLastError

LogErrorToFile

Sub LogErrorToFile()
    Dim logFso
    Dim log

    On Error Resume Next

    Set logFso = Server.CreateObject("Scripting.FileSystemObject")
    If Err.number <> 0 Then
        Exit Sub
    End If

    Set log = objFS.OpenTextFile("YourLogPath.txt", 8, True)
    If Err.number <> 0 Then
        Exit Sub
    End If

    log.WriteLine "URL: " & Request.ServerVariables("URL")
    log.WriteLine "File: " & err.File
    log.WriteLine "Line, col: " & err.Line & ", " & err.Column
    log.WriteLine "Description" & err.Description & vbCrLf

    logFso.Close
End Sub

然后根据需要添加此页面。

GetLastError返回的对象已记录在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的简化。这篇博客文章中的示例代码更加完整,可以处理到数据库的日志。