一個簡易Asp.net網站日誌系統
前不久在網站上看到了網站日誌訪問記錄元件UserVisitLogsHelp開源了! 這篇部落格感覺還不錯,就把原始碼download了下來,學習一下,發現裡面的程式碼書寫和設計並不是很好,於是自己改了改。自己在測試中也發現了一點小問題,同時也記錄出來。
該元件實現原理很簡單:主要利用IHttpModule介面並在Web.config中的HttpModule節點新增此元件的配置,考慮到效能和可移植性,資料庫採用開源Sqlite,方便維護和資料採集。這裡資料採集需要一個相應的配置類,結構如下:
FileSource和DateSource兩個屬性共同決定sqllite檔名,DateSource 取值是day,month,year,表示每天、月、年一個數據庫檔案。比如我這裡是month,生成的檔案如下:
ExcludeUrlRegex屬性主要是設定需要排除url對應的正則表示式。很多時候我們並不需要記錄css、js、圖片等靜態資源的訪問日誌。
在測試的時候 建議大家不要設定Password屬性,不然在用sqllite管理工具開啟資料庫檔案時出現錯誤資訊。如我這裡用SQLlite Administrator錯誤資訊如下:
整個web application必須部署到正式的IIS環境,千萬不要使用IIS Express,如果你用IIS Express會出現如下錯誤。
記錄的 Sqlite日誌資料庫 結構如下:
編號 |
欄位名稱 |
欄位型別 |
備註 |
1 |
Id |
integer |
自增序號(PK,Not Null) |
2 |
UserHostAddress |
varchar(20) |
遠端客戶端的IP主機地址 |
3 |
UserHostName |
varchar(20) |
遠端客戶端的DNS名稱 |
4 |
UrlAbsoluteUri |
varchar(1600) |
當前請求的絕對URI |
5 |
PhysicalPath |
varchar(500) |
當前請求的URL相對應的物理檔案路徑 |
6 |
UserAgent |
varchar(1000) |
客戶端瀏覽器的原始使用者代理資訊 |
7 |
HttpMethod |
varchar(4) |
客戶端使用的HTTP資料傳輸方法 |
8 |
UserLanguages |
varchar(20) |
客戶端語言首選項的排序字元 |
9 |
UrlHost |
varchar(100) |
客戶端主機的例項名 |
10 |
UrlPort |
varchar(10) |
當前URI的埠號 |
11 |
TotalBytes |
integer |
當前輸入流中的位元組數 |
12 |
ContentLength |
integer |
客戶端傳送的內容長度(以位元組計) |
13 |
IsLocal |
varchar(5) |
當前請求是否來自本地計算機 |
14 |
BrowserType |
varchar(30) |
瀏覽器的名稱和主(整數)版本號 |
15 |
BrowserVersion |
varchar(20) |
瀏覽器的完整版本號(包括整數和小數) |
16 |
BrowserPlatform |
varchar(20) |
客戶端使用的作業系統平臺名稱 |
17 |
BrowserBeta |
varchar(5) |
瀏覽器是否為測試版 |
18 |
BrowserActiveXControls |
varchar(5) |
瀏覽器是否支援ActiveX控制元件 |
19 |
BrowserCookies |
varchar(5) |
瀏覽器是否支援Cookie |
20 |
BrowserCrawler |
varchar(5) |
瀏覽器是否為Web爬行遍歷搜尋引擎 |
21 |
BrowserJavaScript |
varchar(5) |
瀏覽器支援的EcmaScript主版本號 |
22 |
BrowserSupportsXmlHttp |
varchar(5) |
瀏覽器是否支援通過HTTP接收XML |
23 |
BrowserInputType |
varchar(30) |
瀏覽器支援的輸入型別 |
24 |
BrowserScreenPixelsWidth |
integer |
瀏覽器顯示的近似寬度(單位畫素) |
25 |
BrowserScreenPixelsHeight |
integer |
瀏覽器顯示的近似高度(單位畫素) |
26 |
UrlReferrerAbsoluteUri |
varchar(1600) |
客戶端上次請求(該請求連結當前的URL)的絕對URI |
27 |
UrlReferrerAbsoluteUriDecode |
varchar(1600) |
對UrlReferrerAbsoluteUri欄位進行zh-cn或utf-9解碼 |
28 |
UrlReferrerHostName |
varchar(100) |
客戶端上次請求(該請求連結當前的URL)的DNS名稱 |
29 |
CanCombineFormsInDeck |
varchar(5) |
瀏覽器是否支援包括多個視窗的卡片組 |
30 |
IsMobileDevice |
varchar(5) |
瀏覽器是否為已識別的移動裝置 |
31 |
MobileDeviceManufacturer |
varchar(30) |
已知移動裝置製造商的名稱 |
32 |
MobileDeviceModel |
varchar(30) |
已知移動裝置的型號名 |
33 |
NumberOfSoftkeys |
integer |
移動裝置上軟鍵的數目 |
34 |
ContentEncoding |
varchar(10) |
內容字元的編碼 |
35 |
ScreenBitDepth |
integer |
瀏覽器顯示的近似深度(單位畫素) |
36 |
Website |
varchar(100) |
訪問Web站點 |
37 |
WebCookies |
varchar(80) |
記錄當前訪客的惟一Cookies值 |
38 |
VisitTime |
varchar(20) |
當前請求訪問時間 |
至於使用方式我想很簡單,在系統根目錄下建立一個WebSiteVisitConfig.xml 檔案,內容如下:
<?xml version="1.0" encoding="utf-8" ?> <WebSiteVisitLog> <WebSiteVisit> <!--FileSource Automatic Generation of Database File year:one year month:every month day:every day None:Does not generate --> <SQLiteConnectings FileSource="~/App_Data/HomeWeb" Password="" DateSource="month" WebSite="" ExcludeUrlRegex=".*\.(js|css|png)" DecodeUrl="" TextDecoding="utf-8" ExcludeUserAgentRegex="" WebCookiesName="" WebCookiesExpires="3650"/> </WebSiteVisit> </WebSiteVisitLog>
同時修改web.config檔案如下:
<modules runAllManagedModulesForAllRequests="true"> <add name="WebSiteVisit" type="WebSiteVisitLog.WebSiteVisitHttpModule,WebSiteVisitLog"/> </modules>
原始碼下載地址:http://download.csdn.net/detail/dz45693/7183419