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

Posted

技术标签:

【中文标题】为经典的 asp 站点启用日志记录【英文标题】:Enable logging for a classic asp site 【发布时间】:2015-03-12 16:03:47 【问题描述】:

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

在 c:\WINDOWS\system32\LogFiles\ 和 c:\inetpub\logs\ 中均未找到任何内容 尝试在此处启用日志记录:https://technet.microsoft.com/en-us/library/cc732826(v=ws.10).aspx 但我没有日志记录图标/按钮(见屏幕截图)。 尝试自定义错误 500 页面,如下所示:http://www.iis.net/configreference/system.webserver/httperrors/error,但没有“错误页面”图标(见屏幕截图) 尝试使用 web.config 自定义 500 页面,如下所示:http://blogs.iis.net/rickbarber/archive/2013/02/18/working-past-500-internal-server-error.aspx,但似乎它被忽略了

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

【问题讨论】:

【参考方案1】:

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

安装 HTTP 错误:

    转到“程序和功能”控制面板。 选择“打开或关闭 Windows 功能” 向下钻取 Internet 信息服务 > 万维网服务 > 通用 HTTP 功能并选择“HTTP 错误”(当您使用它时,您可以通过向下钻取 Internet 信息服务 > 万维网服务来安装日志记录功能> 运行状况和诊断并选择“HTTP 日志记录”。) 点击确定安装。

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

    在您站点的 IIS 设置中,您现在应该会看到一个错误页面选项。双击它。 点击编辑功能设置。 根据您是否进行本地开发,选择“详细错误”或“本地请求的详细错误...”。 在您网站的 IIS 设置中,双击 ASP 选项。 展开调试属性并将“向浏览器发送错误”设置为 true。

您现在应该会看到详细的错误消息。

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

【讨论】:

【参考方案2】:

这会将错误信息写入屏幕。如果要写入文件,请修改“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

【讨论】:

感谢您的回答!我知道 Server.GetLastError,但在这种情况下我需要的只是一个日志记录,因为错误可能发生在任何文件中。【参考方案3】:

关于在任何地方实际记录 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 返回的对象记录在 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 的简化版。这篇博文中的示例代码更加完整,并且处理了一个日志到数据库。

【讨论】:

以上是关于为经典的 asp 站点启用日志记录的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu中怎么启用Crontab日志记录

如果 DEBUG 为 True,也启用 Django 日志记录

怎样查看IIS日志记录?

如何启用程序集绑定日志记录?

我可以为我的自定义日志记录功能启用格式警告吗?

在Windows Server 中IIS6.0配置网站日志记录