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 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組件的一個示例網頁,這個網頁可以從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子目錄中可查找到這個示例頁面。