編程|進階 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
客戶機或其主機(即Proxy 伺服器)的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