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參數限制從文件中返回的記錄?蛇x的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子目錄中可查找到這個示例頁面。
|