直播中
AtEndOfLog()
用ReadLogRecord方法遍歷記錄時(shí),如果文件中的所有記錄都已讀出,返回值為True
CloseLogFiles(io_mode)
關(guān)閉打開的日志文件,io_mode的值指定要關(guān)閉的文件,常數(shù)ForReading(1)表示關(guān)閉打開供讀出的所有文件,F(xiàn)orWriting(2)表示關(guān)閉打開供寫入的所有文件,AllOpenFiles(32)表示關(guān)閉打開的所有文件
OpenLogFile(filename,io_mode,
service_name,service_instance,
output_format)
打開filename指定的日志文件或日志文件集,可選的io_mode參數(shù)可以設(shè)置成ForReading(缺省值,1)或ForWriting(2)。當(dāng)讀取取一個(gè)特定的IIS服務(wù)(例如“W3SVC”和“1”)時(shí),可選的service_name和service_instance參數(shù)限制從文件中返回的記錄??蛇x的output_format參數(shù)指明寫入文件時(shí)使用的格式
ReadFilter(start,end)
當(dāng)在規(guī)定的時(shí)間和日期范圍內(nèi)讀取文件時(shí),限制返回的記錄,兩個(gè)參數(shù)都是可選的,如果忽略的話,start是文件的第一個(gè)記錄,end是最后一個(gè)記錄
ReadLogRecord()
從用OpenLogFile方法打開的當(dāng)前日志文件中讀取下一個(gè)記錄
WriteLogRecord(logging_object)
從打開供讀出的文件中把記錄寫入一個(gè)打開供寫入的文件中,參數(shù)logging_object是一個(gè)引用保存源記錄的Logging Utility組件實(shí)例的對象變量
Logging Utility組件提供了二十種與IIS日志記錄相對應(yīng)的屬性,如表6-10所示:
表6-10 Logging Utility組件的屬性及說明
屬 性
說 明
BytesReceived
請求時(shí)從瀏覽器收到的字節(jié)數(shù)
BytesSent
響應(yīng)時(shí)送至瀏覽器的字節(jié)數(shù)
ClientIP
客戶機(jī)或其主機(jī)(即代理服務(wù)器)的IP地址
Cookie
在請求中傳送的cookie內(nèi)容
CustumFields
加到請求中的定制報(bào)頭的一個(gè)數(shù)組
DataTime
請求的日期和時(shí)間(GMT)
Method
操作類型,如“Get”和“Post”
ProtocolStatus
返回到客戶機(jī)的狀態(tài)消息,即“200 OK”
ProtocolVersion
協(xié)議版本字符串,如“HTTP/1.1”
Referer
包含初始化請求鏈接的網(wǎng)頁的URL
ServerIP
IIS機(jī)器的IP地址
ServerName
IIS服務(wù)器的機(jī)器名
ServerPort
請求到達(dá)的端口號,如“80”
ServiceName
服務(wù)器名稱,如“MSFTPSVC”或“W3SVC”
TimeTaken
檢索和創(chuàng)建網(wǎng)頁的總處理時(shí)間
URIQuery
請求中加到URL的查詢字符串中的所有參數(shù)
URIStem
請示的目標(biāo)URL
UserAgent
由客戶機(jī)發(fā)送的用戶代理字符串
UserName
如果不是匿名地訪問服務(wù)器,UserName是用戶的登錄名
Win32Status
處理了請求后返回的Win32狀態(tài)碼
2. 使用Logging Utility組件
Logging Utility組件最普遍的應(yīng)用是用于對日志文件的自定義查詢。從現(xiàn)有文件中選擇一些記錄寫入新文件的能力,意味著能夠匯總某些類型的條目,或者有選擇性地挑出一些記錄將來使用。
為了使用ForReading、ForWriting和AllOpenFiles常數(shù),必須在網(wǎng)頁的<HEAD>部分包含METADATA指令。
<!-- METADATA TYPE="typelib" FILE="C:\WINNT\system32\inetsrv\logscrpt.dll" -->
為了遍歷記錄,僅須打開文件并且重復(fù)調(diào)用ReadLogRecord,直到AtEndOfLog的返回值為True。在下面的例子中將過濾記錄,僅獲得最后24小時(shí)以內(nèi)的記錄。
'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 day's 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組件的一個(gè)示例網(wǎng)頁,這個(gè)網(wǎng)頁可以從ASP Installable Components主菜單運(yùn)行。
確保在Internet Services Manager中不允許匿名訪問包含示例文件的目錄或loggingutility.asp文件,否則將不能訪問日志文件。打開loggingutility.asp文件或包含該文件的目錄的Properties對話框的Directory Security選項(xiàng)卡,點(diǎn)擊Anonymous access and authentication control部分的Edit按鈕,打開Authentication Method對話框,并關(guān)閉Anonymous access選項(xiàng)。
必須改變?nèi)罩疚募奈募赃m合你的計(jì)算機(jī)。在缺省Web網(wǎng)站的Properties對話框的Web Site選項(xiàng)卡中,打開W3C Extended Logging,如圖6-22所示:
圖6-22 使用Logging Utility組件的設(shè)置1
在這個(gè)對話框中,點(diǎn)擊Properties按鈕,打開Extended Logging Properties對話框,在這里會打開要用的文件名。選擇固定大小的日志文件選項(xiàng),這樣文件名將是extend1.log和extend2.log等等。如圖6-23所示:
圖6-23 使用Logging Utility組件的設(shè)置2
打開Extended Properties選項(xiàng)卡,確保選中想要的條目,如圖6-24所示:
圖6-24 使用Logging Utility組件的設(shè)置3
現(xiàn)在可以運(yùn)行示例網(wǎng)頁并檢查結(jié)果,可以使用下列代碼在HTML表中顯示數(shù)值。
<%
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)
%>
其結(jié)果如圖6-25所示:
圖6-25 使用Logging Utility組件的示例運(yùn)行結(jié)果
6.3 第三方服務(wù)器組件
在本節(jié)中,簡要概述ASP系統(tǒng)中要用到的一些常見的商用和免費(fèi)的第三方服務(wù)器組件。
開發(fā)Web網(wǎng)站時(shí),必須完成的兩個(gè)任務(wù)是管理兼容性以及向服務(wù)器上載文件。下面將介紹的兩個(gè)組件能有助于完成上述的任務(wù),而且還介紹另外一個(gè)組件,可取代Microsoft的Registry Access組件(該組件一般是從相應(yīng)的Web網(wǎng)站得到的)。
在附錄G中,給出了一些最為有用的組件的清單。
6.3.1 BrowserHawk組件
很多人使用由IIS及ASP提供的Browser Capability組件時(shí),都會遇到一個(gè)麻煩,瀏覽器的定義文件(browscap.ini)要求定期的維護(hù)或替換以跟得上新版瀏覽器的要求。
Cyscape公司提供了broscap.ini的升級版本,同時(shí)提供了他們自己的能在服務(wù)器端和客戶端進(jìn)行瀏覽器檢測的組件。而且,還提供了便捷的圖形界面用于查看及修改自己的瀏覽器定義文件,如圖6-26所示:
圖6-26 BrowserHawk組件
可以看到對于每個(gè)瀏覽器類型,都有許多屬性,如動態(tài)HTML、樣式表、JavaScript版本、文件上載能力、SSL(Secure Sockets Layer)支持、操作系統(tǒng)細(xì)節(jié)以及語言等。與Microsoft的Browser Capability組件一樣,也可以添加自己的內(nèi)容。這里還有一個(gè)非常有用的具有向?qū)эL(fēng)格的特性,能幫助我們把新的瀏覽器類型添加到定義文件中,如圖6-27所示:
圖6-27 向定義文件添加新瀏覽器的向?qū)?BR>BrowserHawk組件具有辯認(rèn)出新的瀏覽器(采用一項(xiàng)特殊的模式匹配算法)以及那些缺省支持的一系列瀏覽器的能力,包括Opera和WebTV。使用過濾功能添加新屬性也很容易。
當(dāng)然,BrowserHawk組件的最大優(yōu)點(diǎn)可能是定期對來自Cyscape公司的Web網(wǎng)站的瀏覽器定義文件新版本進(jìn)行自動檢測,同時(shí)把一些內(nèi)容吸收合并到當(dāng)前使用的定義文件里,這意味著沒有必要不斷地將定義文件拷貝到所有的Web服務(wù)器中。
BrowserHawk組件使用起來比較容易,與Browser Capability組件是兼容的,需要做的是在創(chuàng)建組件實(shí)例的Server.CreateObject方法或<OBJECT>元素中改變ProgID。把“MSWC.BrowserType”改為“cyScape.browserObj”。
Set objBCap = Server.CreateObject(“cyScape.browserObj”)
對可能出現(xiàn)的問題,應(yīng)該閱讀BrowserHawk組件的文檔。 可從Cyscape公司的Web網(wǎng)站(http://www.cyscape.com)下載BrowserHawk的拷貝。本章中已經(jīng)包含了使用BrowserHawk組件的示例網(wǎng)頁,使讀者能夠了解如何使用BrowserHawk組件,在Chapter06目錄下的BrowserHawk子目錄中可查找到這個(gè)示例頁面。