6.2.11 logging utility组件
logging utility组件是asp 3.0的新组件,提供了访问日志文件的方法,这个日志文件是由服务器支持的用于web和ftp网站的iis创建的。
1. logging utility组件的成员
logging utility组件提供了六种方法,能读取日志文件的内容、把新记录写进已存在的日志文件中。这些方法和上一章讨论的filesystemobject对象的方法有相似性,如表6-9所示:
表6-9 logging utility组件的方法及说明
方 法
说 明
atendoflog()
用readlogrecord方法遍历记录时,如果文件中的所有记录都已读出,返回值为true
closelogfiles(io_mode)
关闭打开的日志文件,io_mode的值指定要关闭的文件,常数forreading(1)表示关闭打开供读出的所有文件,forwriting(2)表示关闭打开供写入的所有文件,allopenfiles(32)表示关闭打开的所有文件
openlogfile(filename,io_mode,
service_name,service_instance,
output_format)
打开filename指定的日志文件或日志文件集,可选的io_mode参数可以设置成forreading(缺省值,1)或forwriting(2)。当读取取一个特定的iis服务(例如“w3svc”和“1”)时,可选的service_name和service_instance参数限制从文件中返回的记录。可选的output_format参数指明写入文件时使用的格式
readfilter(start,end)
当在规定的时间和日期范围内读取文件时,限制返回的记录,两个参数都是可选的,如果忽略的话,start是文件的第一个记录,end是最后一个记录
readlogrecord()
从用openlogfile方法打开的当前日志文件中读取下一个记录
writelogrecord(logging_object)
从打开供读出的文件中把记录写入一个打开供写入的文件中,参数logging_object是一个引用保存源记录的logging utility组件实例的对象变量
logging utility组件提供了二十种与iis日志记录相对应的属性,如表6-10所示:
表6-10 logging utility组件的属性及说明
属 性
说 明
bytesreceived
请求时从浏览器收到的字节数
bytessent
响应时送至浏览器的字节数
clientip
客户机或其主机(即代理服务器)的ip地址
cookie
在请求中传送的cookie内容
custumfields
加到请求中的定制报头的一个数组
datatime
请求的日期和时间(gmt)
method
操作类型,如“get”和“post”
protocolstatus
返回到客户机的状态消息,即“200 ok”
protocolversion
协议版本字符串,如“http/1.1”
referer
包含初始化请求链接的网页的url
serverip
iis机器的ip地址
servername
iis服务器的机器名
serverport
请求到达的端口号,如“80”
servicename
服务器名称,如“msftpsvc”或“w3svc”
timetaken
检索和创建网页的总处理时间
uriquery
请求中加到url的查询字符串中的所有参数
uristem
请示的目标url
useragent
由客户机发送的用户代理字符串
username
如果不是匿名地访问服务器,username是用户的登录名
win32status
处理了请求后返回的win32状态码
2. 使用logging utility组件
logging utility组件最普遍的应用是用于对日志文件的自定义查询。从现有文件中选择一些记录写入新文件的能力,意味着能够汇总某些类型的条目,或者有选择性地挑出一些记录将来使用。
为了使用forreading、forwriting和allopenfiles常数,必须在网页的<head>部分包含metadata指令。
<!– metadata type="typelib" file="c:\winnt\system32\inetsrv\logscrpt.dll" –>
为了遍历记录,仅须打开文件并且重复调用readlogrecord,直到atendoflog的返回值为true。在下面的例子中将过滤记录,仅获得最后24小时以内的记录。
create the component instance
set objlogutil = server.createobject("mswc.iislog")
open the log file for reading, for the w3svc instance number 1
objlogutil.openlogfile "extend#.log", forreading, "w3svc", 1, 0
set a filter for the last days records only
objlogutil.readfilter dateadd("d", -1, now), now
loop through the records
do while not objlogutil.atendoflog
objlogutil.readlogrecord read the next record
response.write "request received for page " & objlogutil.urlstem & " on " _
& objlogutil.datetime & " from ip address " _
& objlogutil.clientip & ".<br>"
loop
objlogutil.closelogfiles(forreading) close the file(s)
本书提供了演示使用logging utility组件的一个示例网页,这个网页可以从asp installable components主菜单运行。
确保在internet services manager中不允许匿名访问包含示例文件的目录或loggingutility.asp文件,否则将不能访问日志文件。打开loggingutility.asp文件或包含该文件的目录的properties对话框的directory security选项卡,点击anonymous access and authentication control部分的edit按钮,打开authentication method对话框,并关闭anonymous access选项。
必须改变日志文件的文件名以适合你的计算机。在缺省web网站的properties对话框的web site选项卡中,打开w3c extended logging,如图6-22所示:
图6-22 使用logging utility组件的设置1
在这个对话框中,点击properties按钮,打开extended logging properties对话框,在这里会打开要用的文件名。选择固定大小的日志文件选项,这样文件名将是extend1.log和extend2.log等等。如图6-23所示:
图6-23 使用logging utility组件的设置2
打开extended properties选项卡,确保选中想要的条目,如图6-24所示:
图6-24 使用logging utility组件的设置3
现在可以运行示例网页并检查结果,可以使用下列代码在html表中显示数值。
<%
set objlogutil = server.createobject("mswc.iislog")
objlogutil.openlogfile "extend#.log", forreading, "w3svc", 1, 0
objlogutil.readfilter dateadd("d", -1, now), now
%>
<table cellpadding="10">
<tr>
<th>date/time</th>
<th>client ip</th>
<th>bytes sent</th>
<th>target url</th>
</tr>
<%
do while not objlogutil.atendoflog
objlogutil.readlogrecord read the next record
%>
<tr>
<td><% = objlogutil.datetime %></td>
<td><% = objlogutil.clientip %></td>
<td><% = objlogutil.bytessent %></td>
<td><% = objlogutil.urlstem %></td>
</tr>
<%
loop
objlogutil.closelogfiles(forreading)
%>
其结果如图6-25所示:
图6-25 使用logging utility组件的示例运行结果
6.3 第三方服务器组件
在本节中,简要概述asp系统中要用到的一些常见的商用和免费的第三方服务器组件。
开发web网站时,必须完成的两个任务是管理兼容性以及向服务器上载文件。下面将介绍的两个组件能有助于完成上述的任务,而且还介绍另外一个组件,可取代microsoft的registry access组件(该组件一般是从相应的web网站得到的)。
在附录g中,给出了一些最为有用的组件的清单。
6.3.1 browserhawk组件
很多人使用由iis及asp提供的browser capability组件时,都会遇到一个麻烦,浏览器的定义文件(browscap.ini)要求定期的维护或替换以跟得上新版浏览器的要求。
cyscape公司提供了broscap.ini的升级版本,同时提供了他们自己的能在服务器端和客户端进行浏览器检测的组件。而且,还提供了便捷的图形界面用于查看及修改自己的浏览器定义文件,如图6-26所示:
图6-26 browserhawk组件
可以看到对于每个浏览器类型,都有许多属性,如动态html、样式表、javascript版本、文件上载能力、ssl(secure sockets layer)支持、操作系统细节以及语言等。与microsoft的browser capability组件一样,也可以添加自己的内容。这里还有一个非常有用的具有向导风格的特性,能帮助我们把新的浏览器类型添加到定义文件中,如图6-27所示:
图6-27 向定义文件添加新浏览器的向导
browserhawk组件具有辩认出新的浏览器(采用一项特殊的模式匹配算法)以及那些缺省支持的一系列浏览器的能力,包括opera和webtv。使用过滤功能添加新属性也很容易。
当然,browserhawk组件的最大优点可能是定期对来自cyscape公司的web网站的浏览器定义文件新版本进行自动检测,同时把一些内容吸收合并到当前使用的定义文件里,这意味着没有必要不断地将定义文件拷贝到所有的web服务器中。
browserhawk组件使用起来比较容易,与browser capability组件是兼容的,需要做的是在创建组件实例的server.createobject方法或<object>元素中改变progid。把“mswc.browsertype”改为“cyscape.browserobj”。
set objbcap = server.createobject(“cyscape.browserobj”)
对可能出现的问题,应该阅读browserhawk组件的文档。 可从cyscape公司的web网站(http://www.cyscape.com)下载browserhawk的拷贝。本章中已经包含了使用browserhawk组件的示例网页,使读者能够了解如何使用browserhawk组件,在chapter06目录下的browserhawk子目录中可查找到这个示例页面。
