【ASP】如何利用GetLastError函数捕捉WEB页面上的500.100错误位置和详细信息
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
:【ASP】如何利用GetLastError函数捕捉WEB页面上的500.100错误位置和详细信息 我试图诊断一个网站的问题,似乎是在代码的地方抛出一个错误。从错误日志看来,它是一个SQL语法错误,由错误的SQL代码错误串联导致。我的问题是,我无法重现错误,但客户仍然可以得到它,这可能是由许多查询造成的。所以我的计划是创建我自己的500错误页面来捕捉结果。我想让页面捕获所有会话数据,所有POST和GET数据(我可以这样做),但我也想捕获关于错误的详细信息。当网站允许显示错误时,几乎会在页面上显示的内容。用小箭头指定该行。 有没有办法从自定义错误页面中捕获错误? 参考微软公司官网页面:define a custom 500 error code page,中文页面:http://21420.oa22.cn,当你的程序崩溃时可以给你更多的信息。以下是一些示例代码,它们会针对您的错误构建详细的错误消息说明。 Set objASPError = Server.GetLastError Dim strProblem strProblem = "ASPCode: " & Server.HTMLEncode(objASPError.ASPCode) & vbCrLf strProblem = strProblem & "Number: 0x" & Hex(objASPError.Number) & vbCrLf strProblem = strProblem & "Source: [" & Server.HTMLEncode(objASPError.Source) & "]" & vbCrLf strProblem = strProblem & "Category: " & Server.HTMLEncode(objASPError.Category) & vbCrLf strProblem = strProblem & "File: " & Server.HTMLEncode(objASPError.File) & vbCrLf strProblem = strProblem & "Line: " & CStr(objASPError.Line) & vbCrLf strProblem = strProblem & "Column: " & CStr(objASPError.Column) & vbCrLf strProblem = strProblem & "Description: " & Server.HTMLEncode(objASPError.Description) & vbCrLf strProblem = strProblem & "ASP Description: " & Server.HTMLEncode(objASPError.ASPDescription) & vbCrLf strProblem = strProblem & "Server Variables: " & vbCrLf & Server.HTMLEncode(Request.ServerVariables("ALL_HTTP")) & vbCrLf strProblem = strProblem & "QueryString: " & Server.HTMLEncode(Request.QueryString) & vbCrLf strProblem = strProblem & "URL: " & Server.HTMLEncode(Request.ServerVariables("URL")) & vbCrLf strProblem = strProblem & "Content Type: " & Server.HTMLEncode(Request.ServerVariables("CONTENT_TYPE")) & vbCrLf strProblem = strProblem & "Content Length: " & Server.HTMLEncode(Request.ServerVariables("CONTENT_LENGTH")) & vbCrLf strProblem = strProblem & "Local Addr: " & Server.HTMLEncode(Request.ServerVariables("LOCAL_ADDR")) & vbCrLf strProblem = strProblem & "Remote Addr: " & Server.HTMLEncode(Request.ServerVariables("LOCAL_ADDR")) & vbCrLf strProblem = strProblem & "Time: " & Now & vbCrLf 也可以将错误输出到根目录下一个文本文件中: <% 'Set this page up in IIS to receive HTTP 500 errors ''Type' needs to be 'URL' and the URL is e.g.: '/500Error.asp' if this file is named '500Error.asp' and is in the site root directory. 'This script assumes there is a "/Log" folder, and that IIS has write access to it. Const ForReading = 1, ForWriting = 2, ForAppending = 8 Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Dim objFSO, err Set objFSO=createObject("scripting.FileSystemObject") Set err = Server.GetLastError() outFile=Server.MapPath("/ErrorLog.txt") Set objFile = objFSO.OpenTextFile(outFile, ForAppending, True, TristateTrue) objFile.WriteLine Now & " - ERROR - ASPCode:" & err.ASPCode & " ASPDescription: " & err.ASPDescription & " Category: " & err.Category & " Description: " & err.Description & " File: " & err.File & " Line: " & err.Line & " Source: " & err.Source & vbCrLf objFile.Close Set objFile = Nothing Set err = Nothing %> 特别说明: GetLastError函数貌似只在IIS6以前的版本中生效,在IIS7中GetLastError函数似乎没有任何可用的信息。其实是在IIS7中,必须按照如下步骤设置后,GetLastError函数才会生效。 打开IIS管理器,找到网站ClickSun-》错误页,双击“错误页”: 双击“错误页”,然后点击右边的“编辑功能设置”: 在以上页面中,错误响应选择:自定义错误页,默认页-》路径换成自己编写的错误捕捉页面(页面核心代码见上面):/error_500.asp,路径类型:执行URL。 保存后,双击状态码500: 响应操作改为:在此网站上执行URL,URL地址还是上面自己开发的自定义错误拦截页面(页面核心代码见上面):/error_500.asp,然后确定保存即可生效。 下面是拦截成功界面效果: 当然,设计这个HTTP500错误页面拦截的根本目的就是不想用户或黑客攻击者看到真实的错误代码,但又需要将这些错误信息发送给开发者或网管,所以需要在自定义的错误拦截页面error_500.asp中,将上面的真实错误信息保存到数据库或文本文件中,方便开发人员或网管予以分析解决,给用户或黑客攻击者看到的只需要是一个简单的错误提醒图片即可。 该文章在 2023/9/26 18:33:00 编辑过 |
关键字查询
相关文章
正在查询... |