当前位置:asp编程网>技术教程>Asp教程>  正文

asp运行过程中捕捉和保存asp错误的函数

2012-03-19 14:31:43   来源:网络    作者:佚名   浏览量:2397   收藏

在asp调试的时候,经常是根据出现的错误提示来找到错误的地方,然后作相应的修改,直到没有错误为止。这不仅是asp调试的方法,也是所有程序的调试方法。在asp的运行过程中,如何更明白的显示出现的错误在哪个页面,第几行,但又不能让客户端看到这个错误。所以想出来一个方法:使用on error resume next,将错误不显示到页面上,这样就不会给客户看到。但还要将错误写到一个自定义的日志文件中,以便我们开发人员方便找到错误所在的页面,或者对出现错误的情况下,转向一个自定义的页面上来,这样能给客户更好的体验。
过程名:catch(str)
功   能:清除IIS的错误提示信息,自定义错误提示返回给用户,并将出错信息保存到txt文件(当然你也可以稍做修改转向自定义页面等)
使用方法:

<%
on error resume next 
'你的代码,如数据库连接 
call catch("显示给用户的提示信息") 
%>
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)

 catch 函数的具体代码如下:

<% 
option explicit 
'例一--------------------------- 
'必须和on error resume next一起使用,但在网页没有正式发布之前最好将其注释掉,以免在调试时看不到出错详细信息 
on error resume next 
'i没有定义,会出错,使用catch清除错误并保存到记事本 

call catch("页面无法访问") 
'------------------------------- 
'例二--------------------------- 
function conn() 
  '必须和on error resume next一起使用 
  on error resume next 
  '...........你的连接数据库代码 
  call catch("数据库打开错误") 
end function 
'------------------------------- 
sub catch(str) 
	if err.number <> 0 then 
	dim tmp,path 
	'错误日志绝对路径,如"/error_log.txt" 
	path = "/table/error_log.txt" 
	tmp = tmp & "出错页面:" & geturl & vbcrlf 
	tmp = tmp & "错误时间:" & now() & vbcrlf 
	tmp = tmp & "来访IP:" & ip & vbcrlf 
	tmp = tmp & "提示信息:" & str & vbcrlf 
	tmp = tmp & "错误代号:" & err.number & vbcrlf 
	tmp = tmp & "错误信息:" & err.description & vbcrlf 
	tmp = tmp & "应用程序:" & err.source & vbcrlf & vbcrlf & vbcrlf 
	tmp = tmp & file_read(path) 
	call file_save(tmp,path,1) 
	err.clear() 
	die(str) 
	end if 
end sub 
'以下为catch所用到的函数-------------------- 
sub echo(str) 
	response.write(str) 
end sub 
sub die(str) 
	echo(str) : response.end() 
end sub 
function ip() 
	ip = request.servervariables("remote_addr") 
end function 
'获取当前URL 
function geturl() 
	dim tmp 
	if lcase(request.servervariables("https")) = "off" then 
	tmp = "http://" 
	else 
	tmp = "https://" 
	end if 
	tmp = tmp & request.servervariables("server_name") 
	if request.servervariables("server_port") <> 80 then 
	tmp = tmp & ":" & request.servervariables("server_port") 
	end if 
	tmp = tmp & request.servervariables("url") 
	if trim(request.querystring) <> "" then 
	tmp = tmp & "?" & trim(request.queryString) 
	end if 
	geturl = tmp 
end function 
'函数:读取文件内容到字符串 
function file_read(path) 
	dim tmp : tmp = "false" 
	if not file_exists(path) then file_read = tmp : exit function 
	dim stream : set stream = server.CreateObject("ADODB.Stream") 
	with stream 
	.type = 2 '文本类型 
	.mode = 3 '读写模式 
	.charset = "gb2312" 
	.open 
	.loadfromfile(server.MapPath(path)) 
	tmp = .readtext() 
	end with 
	stream.close : set stream = nothing 
	file_read = tmp 
end function 
'函数:保存字符串到文件 
function file_save(str,path,model) 
	if model<>0 and model<>1 then model=1 
	if model=0 and file_exists(path) then file_save=true : exit function 
	dim stream : set stream = server.CreateObject("ADODB.Stream") 
	with stream 
	.type = 2 '文本类型 
	.charset = "gb2312" 
	.open 
	.writetext str 
	.savetofile(server.MapPath(path)),model+1 
	end with 
	stream.close : set stream = nothing 
	file_save = file_exists(path) 
end function 
'函数:检测文件/文件夹是否存在 
function file_exists(path) 
	dim tmp : tmp = false 
	dim fso : set fso = server.CreateObject("Scripting.FilesyStemObject") 
	if fso.fileexists(server.MapPath(path)) then tmp = true 
	if fso.folderexists(server.MapPath(path)) then tmp = true 
	set fso = nothing 
	file_exists = tmp 
end function 
%> 
(鼠标移到代码上去,在代码的顶部会出现四个图标,第一个是查看源代码,第二个是复制代码,第三个是打印代码,第四个是帮助)


关于我们-广告合作-联系我们-积分规则-网站地图

Copyright(C)2013-2017版权所属asp编程网