Enable logging for a classic asp site

别来无恙 提交于 2019-12-21 09:39:20

问题


I inherited a classic ASP project and and have deployed it on a IIS 7.5. I am able to access the site, however at certain point I get a generic 500 error page. I want to know what is going on, so I think the best is to see the logs

  • Have found nothing in c:\WINDOWS\system32\LogFiles\ nor c:\inetpub\logs\
  • Tried to enable logging as here: https://technet.microsoft.com/en-us/library/cc732826(v=ws.10).aspx But I have no Logging icon/button there (see screenshot).
  • Tries custom error 500 page as here: http://www.iis.net/configreference/system.webserver/httperrors/error but there's no "Error Pages" icon (see screenshot)
  • Tried to custom 500 page with web.config as here: http://blogs.iis.net/rickbarber/archive/2013/02/18/working-past-500-internal-server-error.aspx but seems that it gets ignored

For the record, I am a newbie with IIS/ASP so the question can sound a bit silly.. Thanks for any suggestion!


回答1:


You should install the HTTP Errors feature in IIS. This is enough to view the error message -- you won't need logging.

To install HTTP Errors:

  1. Go to the Programs and Features control panel.
  2. Select "Turn Windows features on or off"
  3. Drill down to Internet Information Services > Word Wide Web Services > Common HTTP Features and select "HTTP Errors" (While you're at it, you can install the logging feature by drilling down to Internet Information Services > Word Wide Web Services > Health and Diagnostics and selecting "HTTP Logging".)
  4. Click OK to install.

Once installed, configure IIS to show detailed error messages:

  1. In the IIS settings for your site you should now see an Error Pages option. Double-click it.
  2. Click Edit Feature Settings.
  3. Select either "Detailed errors" or "Detailed errors for local requests..." depending on whether you are doing local development or not.
  4. In the IIS settings for your site, double-click the ASP option.
  5. Expand Debugging Properties and set "Send Errors To Browser" to true.

You should now see detailed error messages.

IIS logs won't help you because they do not include the detailed error messages.




回答2:


This will write the error info to the screen. Modify the "If blnLogFailure" section if you want to write to a file.

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



回答3:


About actually logging Asp errors wherever they happen, as the question title seems to ask, a custom error page should be added.

This requires "HTTP Errors", so first install it if not already done. See Keith answer.

Then, add an .asp error page. This page has to be as robust as possible, with minimal dependencies. If it fails too, you will not have any log. This page could first do something like:

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

Then add in this page whatever you wish.

The object returned by GetLastError is documented here.

Next, ask your site to use this error page in case of Asp errors. For this, set the 500,100 error page to your error page. In web.config, assuming your error file is named err500.asp and lies at the root of your site, this can be done with:

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

This answer is a simplification of this blog post. The sample code on this blog post is more complete and handles a log to database.



来源:https://stackoverflow.com/questions/29014663/enable-logging-for-a-classic-asp-site

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!